JDK9将(可能)引入一个模块系统。作为其中的一部分,Java类库将被模块化。什么是JDK9中的预定义模块或需要哪个模块来修复依赖关系问题?
当类未找到时,可能会导致异常,因为它们位于尚未指定为依赖项的模块中。
将使用模块系统创建哪些模块以及它们各自的内容是什么?
或者换个说法:给定一个没有加载的类,如何找到合适的模块作为依赖包含?
JDK9将(可能)引入一个模块系统。作为其中的一部分,Java类库将被模块化。什么是JDK9中的预定义模块或需要哪个模块来修复依赖关系问题?
当类未找到时,可能会导致异常,因为它们位于尚未指定为依赖项的模块中。
将使用模块系统创建哪些模块以及它们各自的内容是什么?
或者换个说法:给定一个没有加载的类,如何找到合适的模块作为依赖包含?
如何找到合适的模块作为依赖包含?
考虑这个恶搞类:
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
谢谢。更新了链接。 –
模块的完整列表可以在这里找到。 http://cr.openjdk.java.net/~mr/jigsaw/ea/module-summary.html
它列出了构成Java类库的73个模块。对于每一个,都有一个包含的软件包列表以及它依赖的其他模块列表。
给定一个未加载的类,可以搜索该站点上的包名称的开始,以确定要依赖的模块。
'jdeps --list -deps' – ZhekaKozlov
我会注意到,您在标题中提出了多个问题,第一个问题是无关紧要的问题(根据[导览](https://stackoverflow.com/tour)),因为它是一个列表请求东西的。 –