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

Method getModule returning unnamed module for class in named module

我刚开始看 Java 9 模块系统,我想知道 class 是否有可能知道它位于哪个模块中。

因此我创建了以下模块

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 的 class,我正在调用

Module module = Overview.class.getModule();

然而,返回的模块对象是未命名的,没有ModuleDescriptor

我在这里使用 getModule() 是否正确,或者是否有任何其他方法可以加载 class 的模块?

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

class 路径(带有 java --class-path ...)上的所有 JAR 都被捆绑到同一个所谓的 unnamed module,无论它们是 "a real module" 还是 "just a JAR"。当您从这样的 JAR 中向 class 询问其模块时,您会得到您描述的结果。

尝试将 JAR 放在模块路径上(使用 java --module-path ...)并且 Class::getModule 应该 return 您所期望的。