我刚开始看一下Java 9模块系统,我想知道一个类是否有可能知道它所在的模块。
因此我创建了以下模块
module de.test {
exports de.test.myexport;
}
并编译了一个看起来像
的jar文件> jar --print-module-descriptor --file=Java9Test-1.0-SNAPSHOT.jar
de.test
requires mandated java.base
exports de.test.myexport
在de.test
包中,我有一个名为Overview
的班级,我正在呼叫
Module module = Overview.class.getModule();
但是,返回的模块对象未命名,没有ModuleDescriptor
。
我在这里正确使用getModule()
,还是有其他方法来加载类的模块?
我在OS X上使用JDK 9 build 120。
答案 0 :(得分:17)
类路径上的所有JAR(带有java --class-path ...
)都捆绑在同一个所谓的unnamed module中,无论它们是“真正的模块”还是“只是一个JAR”。当你从这样一个JAR的类中询问它的模块时,你会得到你描述的结果。
尝试将JAR放在模块路径上(使用java --module-path ...
),Class::getModule
应该返回您期望的内容。