2017-09-18 10 views
-1

java.lang.ModuleをJava 9の文字列名で取得するには?Java 9でモジュール名を取得する方法は?

は、例えば、我々はその初期化後、少なくともjava.baseで構成ブート層からあなたのモジュールを取得するために

String name = "some.module"; 
Module module = //how to get here it? 
+9

[前の質問](https://stackoverflow.com/questions/46287371/how-to-get-module-by-string-name-in-java-9)を削除して再投稿しないでくださいdownvotesをバイパスします。代わりにそれらに対処するために必要なものを修正してください。 –

答えて

6

一つの方法があります:

String moduleName = "my.module"; 
Module m = ModuleLayer.boot().findModule(moduleName).orElse(null); 

IMO好ましくは安全な方法しかし、モジュールをConfigurationとシステムClassLoaderを使用してモジュールのModuleLayerを取得し、次にfindModule

として取得することになります
Path path = Paths.get("/path/to/your/module"); 

ModuleFinder finder = ModuleFinder.of(path); 
ModuleLayer parent = ModuleLayer.boot(); 

Configuration configuration = parent.configuration().resolve(finder, ModuleFinder.of(), Set.of(moduleName)); 
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader(); 

ModuleLayer layer = parent.defineModulesWithOneLoader(configuration, systemClassLoader); 
Module m = layer.findModule(moduleName).orElse(null); 
+0

作成したレイヤーを変更できない場合、正しく理解できますか?つまり、モジュールの追加/削除ができないということですか? –

+2

@Pavel_K一度作成したレイヤーは、それが含まれているモジュール情報の更新情報で変更できます。モジュールのモジュール情報を更新している場合は、モジュールをレイヤーに追加/削除することができます。 – nullpointer

+0

私は次のことを意味します - 私はモジュールAとBを持っていて、これら2つのモジュールでレイヤーを作成します。後で1)このレイヤーに新しいモジュールを追加できますか? 2)モジュールAをこのレイヤーから取り外しますか? 3)この層のモジュールAを更新するか? –

関連する問題