JDK9 中的预定义模块是什么,或者我需要哪个模块来修复依赖关系问题



JDK9 将(可能(引入一个模块系统。作为其中的一部分,Java类库将被模块化。

当找不到类时,这可能会导致异常,因为它们位于尚未指定为依赖项的模块中。

模块

系统将创建哪些模块,它们各自的内容是什么?

或者换个说法:给定一个未加载的类,我如何找到合适的模块作为依赖项包含?

如何找到要作为依赖项包含的正确模块?

考虑这个欺骗类:

import java.sql.DriverManager;
import java.rmi.RemoteException;
public class UserDao {
    DriverManager driverManager = null;
    public void service() throws RemoteException {
        if (true) {
            throw new RemoteException();
        }
    }
}

假设这个类被编译成user-dao.jar。jdeps 工具是答案(使用 9ea170(:

jdeps --list-deps user-dao.jar
   java.base
   java.rmi
   java.sql

(请注意,jdeps JDK 8 附带的,但在 JDK 9 中更合适。

为了完整起见,如果您知道代码使用特定的类(例如 java.sql.DriverManager (,并且您怀疑需要模块(例如 java.sql (,可以通过文档或在命令行(再次使用 9ea170(确认模块:

bash$ java --describe-module java.sql
java.sql@9-ea
exports java.sql
exports javax.sql
exports javax.transaction.xa
requires java.xml transitive
requires java.base mandated
requires java.logging transitive
uses java.sql.Driver

此处提供了模块的完整列表。 http://cr.openjdk.java.net/~mr/jigsaw/ea/module-summary.html

它列出了 73 个模块,这些模块将构成 Java 类库。对于每个包,都有一个包含的包列表以及它所依赖的其他模块的列表。

给定一个未加载的类,可以在该站点上搜索包名称的开头,以确定要依赖的模块。

最新更新