如何在Java 9中通过Module获取jar文件名?

Pav*_*l_K 3 java java-9 java-module

例如,我有somefile-0.1.jarjar文件,其中包含JPMS模块.此外,我参考Module somemodule了这个模块.

如何通过Module获取jar文件名(使用somemodule参考)?我已经检查过Module API但没有找到办法.

Ala*_*man 6

无法保证模块是从模块化JAR加载的.在任何情况下,我认为这接近你正在寻找的:

Module m = ...
ModuleLayer layer = m.getLayer();
if (layer != null) {
    ModuleReference mref = layer.configuration()
            .findModule(m.getName())
            .map(ResolvedModule::reference)
            .orElseThrow(() -> new RuntimeException("should not happen"));
}
Run Code Online (Sandbox Code Playgroud)

  • @nullpointer来自`Module#getLayer`的文档:"返回包含此模块的模块层;如果此模块不在模块层中,则返回null.模块层包含命名模块,因此在调用时,此方法始终返回null未命名的模块.动态模块是在运行时生成的命名模块.动态模块可能在模块层中,也可能不在模块层中." (4认同)