方法getModule为命名模块中的类返回未命名的模块

时间:2016-05-31 14:36:11

标签: java java-9

我刚开始看一下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。

1 个答案:

答案 0 :(得分:17)

类路径上的所有JAR(带有java --class-path ...)都捆绑在同一个所谓的unnamed module中,无论它们是“真正的模块”还是“只是一个JAR”。当你从这样一个JAR的类中询问它的模块时,你会得到你描述的结果。

尝试将JAR放在模块路径上(使用java --module-path ...),Class::getModule应该返回您期望的内容。