2017-09-17 11 views

答えて

10
ModuleLayer.boot().modules().stream() 
       .map(Module::getName) 
       .forEach(System.out::println); 
+2

これは、ブートレイヤーが唯一のレイヤーである場合にのみ該当します。異なるクラスローダーによってモジュールがロードされている場合、このリストは不完全です。 –

+3

確かに、コード断片は、質問を始めた人を始めます。もちろん、ツールとデバッガ用のAPIがあり、名前のないモジュールも含め、VM内のすべてのモジュールを列挙することができますが、これは疑問の疑問を超えています。 –

+0

私は、Alan Batemanには同意しません。この回答は不完全です。コメントにヒントがあるように、名前のないモジュールや自動モジュールは返されません。このモジュールは、Java 9の初期には非常に一般的なものです。 –

3

アプリケーションの入力としてのモジュールのjarファイルやディレクトリを使用して、あなたはおそらく、このファインダーができることをにすべてのモジュール参照のセットを見つけることから始め、さらにfindAllを利用するためにModuleFinderを使用することができます見つけます。あなたが意図的にtweaking thingsに取得したくない場合は、しかし十分なものでなければならない

java -p <jarfile> --list-modules 

Path dir1, dir2, dir3; 
ModuleFinder finder = ModuleFinder.of(dir1, dir2, dir3); 
Set<ModuleReference> moduleReferences = finder.findAll(); 

これは、モジュールを一覧表示するコマンドラインオプションを使用して容易に可能ですModuleLayerjava.lang.moduleのように、@Alan's answerによって正確に指摘されている。

関連する問題