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

2022-09-02 10:37:43

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

因此,我创建了以下模块

module de.test {
  exports de.test.myexport;
}

并编译了一个看起来像

> jar --print-module-descriptor --file=Java9Test-1.0-SNAPSHOT.jar                                

de.test
  requires mandated java.base
  exports de.test.myexport

在包中,我有一个名为“我调用”的类de.testOverview

Module module = Overview.class.getModule();

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

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

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


答案 1

类路径(with )上的所有 JAR 都被捆绑到同一个所谓的未命名模块中,无论它们是“真正的模块”还是“只是一个 JAR”。当您从这样的JAR中请求类以获取其模块时,您将获得您描述的结果。java --class-path ...

尝试将 JAR 放在模块路径上(带有 ),并应返回预期的结果。java --module-path ...Class::getModule


答案 2

推荐