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

时间:2017-06-16 05:40:29

标签: java-9 jigsaw

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

如果找不到课程,可能会导致例外,因为他们所在的课程尚未被指定为依赖关系。

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

或者说不同:给定一个没有加载的类,我如何找到合适的模块作为依赖项?

2 个答案:

答案 0 :(得分:6)

  

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

考虑这个恶搞类:

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),则可以通过{{3}确认模块},或在命令行上(再次使用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

答案 1 :(得分:2)

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

它列出了构成Java类库的73个模块。对于每个包,都有一个包列表和一个依赖的其他模块列表。

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