20

我刚开始研究 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

在 packagede.test中,我有一个名为Overview我正在调用的类

Module module = Overview.class.getModule();

但是,返回的模块对象是未命名的并且没有ModuleDescriptor.

getModule()在这里使用正确,还是有其他方法可以加载类的模块?

我在 OS X 上使用 JDK 9 build 120。

4

1 回答 1

17

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

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

于 2016-06-01T13:19:09.637 回答