2017-06-16 47 views
3

JDK9将(可能)引入一个模块系统。作为其中的一部分,Java类库将被模块化。什么是JDK9中的预定义模块或需要哪个模块来修复依赖关系问题?

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

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

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

+4

'jdeps --list -deps' – ZhekaKozlov

+1

我会注意到,您在标题中提出了多个问题,第一个问题是无关紧要的问题(根据[导览](https://stackoverflow.com/tour)),因为它是一个列表请求东西的。 –

回答

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 

(请注意,随JDK 8 jdeps,但更适合在JDK 9)

为了完整起见,如果你知道这些代码的用途一个特定的类别(例如java.sql.DriverManager),你怀疑一个模块需要(如java.sql),人们可以通过the doc确认的模块,或者在命令行(与9ea170再次):

bash$ java --describe-module java.sql 
[email protected] 
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个模块。对于每一个,都有一个包含的软件包列表以及它依赖的其他模块列表。

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