【发布时间】:2017-12-24 08:47:51
【问题描述】:
更新:我在这里回答了我自己的问题:
Scanning classpath/modulepath in runtime in Java 9
--
[老问题——过时:]
在 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() 列出模块中的资源,这是我需要做的。
但是,对于通过将非模块 jarfile 添加到类路径中生成的自动(因此未命名)模块,您无法从 ModuleFinder.ofSystem().find(String name) 或 ModuleFinder.ofSystem().findAll() 获得 ModuleReference - 您只能获得 Module来自getClass().getModule()的参考。
我找不到任何方法来获取自动模块的ModuleReference。我也找不到从Module 对象获取ModuleReference 的方法,这意味着如果模块是自动和/或未命名的,我无法在Module 中列出资源。
肯定有办法为给定(已加载)Module 获取ModuleReference?
【问题讨论】:
-
您能否使用可重现的代码示例更新问题并分享您获得的
configuration.modules()的输出。
标签: java classpath java-9 java-module