に非システムモジュールを列挙するためにどのように、あなたはこれらのModuleReference
のオブジェクトは、その後使用して、各モジュールの内容を一覧表示するために使用することができJavaの9モジュールシステムでのJava 9
Set<ModuleReference> ms = ModuleFinder.ofSystem().findAll();
を使用してシステム・モジュールを見つけることができます。
for (ModuleReference m : ms) {
System.out.println(m.descriptor().name());
System.out.println(" " + m.descriptor().toNameAndVersion());
System.out.println(" " + m.descriptor().packages());
System.out.println(" " + m.descriptor().exports());
Optional<URI> location = m.location();
if (location.isPresent()) {
System.out.println(" " + location.get()); // e.g. "jrt:/java.base"
}
m.open().list().forEach(s -> System.out.println(" " + s));
}
そして、現在のクラスのモジュールを取得するには、使用することができます
Module m = getClass().getModule();
しかし、Module
からModuleReference
を得ることができないので、パッケージ以外のモジュールの内容を表示することはできません。ModuleFinder
で表示されていないModule
のシステムはありません。
つの質問:
- 私は非システム・モジュール内のリソースを列挙する方法を教えてください。
- JRE 9では非モジュールクラスパスはどのように読み込まれますか?私はちょうど
java.class.path
システムプロパティに頼っていますか? (タイプURLClassPath
のAppClassLoader#ucp
フィールドが表示されていない、とJRE 9にロックダウンされているので、あなたは、どちらかのイントロスペクションによってそれを得ることができません。)
質問のハイライト部分はモジュールのURI(場所/パス)を取得することでしょうか?私はあなたが非システムモジュールについて悩まされていると思います、それは本当ですか?あなたのコードの他のすべての属性はModuleDescriptor([Moduleのエンティティ])(https://docs.oracle.com/javase/9/docs/api/java/lang/Module.html#getDescriptor- - )それ自体。またAFAIRこれはおそらく同様の質問と重複する可能性があります。あなたが詳細を確認するのを待つでしょう。 – nullpointer
問題の詳細は表示されません。(モジュールの[ModuleLayer](https://docs.oracle.com/javase/9/docs/api/)に興味があるかもしれません。 java/lang/Module.html#getLayer--)。そこにあるリンクの例を見ると、ModuleFinder経由でモジュールのディレクトリを使って設定とレイヤーを見つけることができます。 – nullpointer