更新:我在这里回答了自己的问题:
--
[旧问题 -- 已过时:]
在Java 9中,仅通过Module
对象获取ModuleReference
的正确方法是什么?
考虑这两种引用java.base
的方法:
Module mod = ModuleLayer.boot().findModule("java.base").orElse(null);
ModuleReference modRef = ModuleFinder.ofSystem().find("java.base").orElse(null);
mod
有一个方法 Set<String> getPackages()
,但是你只能得到包的名称,不能列出每个包中的资源。
modRef
有一个方法 ModuleReader open()
,而 ModuleReader
有一个方法 Stream<String> list()
,可以列出模块中的资源,这正是我需要做的。
然而,对于自动(因此未命名的)模块,通过将非模块 jar 文件添加到类路径中生成,你无法从 ModuleFinder.ofSystem().find(String name)
或 ModuleFinder.ofSystem().findAll()
获取 ModuleReference
-- 你只能从 getClass().getModule()
中获取 Module
引用。
我找不到任何方法来获取自动模块的 ModuleReference
。我也找不到一种从 Module
对象获取 ModuleReference
的方法,这意味着如果模块是自动和/或未命名的,则无法列出其中的资源。
肯定有一种方法可以为给定(已加载的)Module
获取ModuleReference
吧?
configuration.modules()
的输出结果。 - Naman