構成は、解決の出力である「可読性グラフ」をカプセル化します。 可読性グラフは頂点がResolvedModule
型の有向グラフであり、エッジはモジュール間の可読性を表す。 Configuration
は、グラフ内の解決済モジュールのセットを取得するmodules()
メソッドを定義します。 ResolvedModule
は、解決されたモジュールが読み取る一連のモジュールを取得するreads()
メソッドを定義します。 読み取られるモジュールは、同じ構成にあるか、parent
構成にある場合があります。
構成では、ルート・モジュールのコレクションを解決するresolve
メソッドと、サービス・バインディングで解決を行うresolveAndBind
メソッドを定義します。 両方のメソッドにインスタンス・バリアントと静的バリアントがあります。 インスタンス・メソッドは、レシーバを親構成として構成を作成します。 静的メソッドは、複数の親構成が存在できる、より高度なケースを対象としています。
Java仮想マシン内のモジュールの各layer
は、構成から作成されます。 boot
層の構成は、 ModuleLayer.boot().configuration()
を呼び出すことによって得られます。 ブート層の構成は、多くの場合、新しい構成を作成するときに親になります。
例
次の例では、resolve
メソッドを使用して、myappという名前のモジュールを、ブート・レイヤーの構成を親構成として解決します。 解決された各モジュールの名前と、各モジュールが読み取るモジュールの名前が出力されます。
Path dir1 = ..., dir2 = ..., dir3 = ...;
ModuleFinder finder = ModuleFinder.of(dir1, dir2, dir3);
Configuration parent = ModuleLayer.boot().configuration();
Configuration cf = parent.resolve(finder, ModuleFinder.of(), Set.of("myapp"));
cf.modules().forEach(m -> {
System.out.format("%s -> %s%n",
m.name(),
m.reads().stream()
.map(ResolvedModule::name)
.collect(Collectors.joining(", ")));
});
- 導入されたバージョン:
- 9
- 関連項目:
-
メソッドのサマリー
修飾子と型メソッド説明static Configuration
empty()
empty構成を返します。findModule
(String name) この構成で解決されたモジュールを検索するか、この構成にない場合は、parent構成を検索します。modules()
この構成内の解決済モジュールの変更不可能なセットを返します。parents()
この構成の親の変更不可能なリストを検索順に返します。resolve
(ModuleFinder before, ModuleFinder after, Collection<String> roots) ルート・モジュールのコレクションを親として解決し、新しい構成を作成します。static Configuration
resolve
(ModuleFinder before, List<Configuration> parents, ModuleFinder after, Collection<String> roots) ルート・モジュールのコレクションを解決して構成を作成します。resolveAndBind
(ModuleFinder before, ModuleFinder after, Collection<String> roots) ルート・モジュールのコレクションをサービス・バインディングとともに解決し、この構成を親として使用して、新しい構成を作成します。static Configuration
resolveAndBind
(ModuleFinder before, List<Configuration> parents, ModuleFinder after, Collection<String> roots) サービス・バインディングを使用してルート・モジュールのコレクションを解決し、構成を作成します。toString()
この構成を説明する文字列を返します。
-
メソッドの詳細
-
resolve
public Configuration resolve(ModuleFinder before, ModuleFinder after, Collection<String> roots) ルート・モジュールのコレクションを親として解決し、新しい構成を作成します。 このメソッドは、この構成を親として呼び出したときに、静的resolve
メソッドで指定されたとおりに機能します。 つまり、この構成がcf
の場合、このメソッドは呼出しと同等です:Configuration.resolve(before, List.of(cf), after, roots);
- パラメータ:
before
- モジュールを見つける前のモジュール・ファインダafter
-before
モジュール・ファインダまたは親構成で見つからない場合にモジュールを見つけるためのモジュール後のファインダroots
- 解決するモジュールのおそらく空のモジュール名の集合- 戻り値:
- 指定されたルート・モジュールを解決した結果の構成
- 例外:
FindException
- 静的なresolve
メソッドで指定された可観測性に関連する理由のいずれかで解決が失敗した場合ResolutionException
- 解決がstaticresolve
メソッドで指定された整合性チェックに失敗した場合SecurityException
- セキュリティ・マネージャによってモジュールの位置が拒否された場合
-
resolveAndBind
public Configuration resolveAndBind(ModuleFinder before, ModuleFinder after, Collection<String> roots) ルート・モジュールのコレクションをサービス・バインディングとともに解決し、この構成を親として使用して、新しい構成を作成します。 このメソッドは、この構成を親として呼び出したときに、静的resolveAndBind
メソッドで指定されたとおりに機能します。 つまり、この構成がcf
の場合、このメソッドは呼出しと同等です:Configuration.resolveAndBind(before, List.of(cf), after, roots);
- パラメータ:
before
- モジュールを見つける前のモジュール・ファインダafter
-before
モジュール・ファインダまたは親構成で見つからない場合にモジュールを見つけるためのモジュール後のファインダroots
- 解決するモジュールのおそらく空のモジュール名の集合- 戻り値:
- サービス・バインディングを使用して指定されたルート・モジュールを解決した結果の構成
- 例外:
FindException
- 静的なresolve
メソッドで指定された可観測性に関連する理由のいずれかで解決が失敗した場合ResolutionException
- 解決がstaticresolve
メソッドで指定された整合性チェックに失敗した場合SecurityException
- セキュリティ・マネージャによってモジュールの位置が拒否された場合
-
resolve
public static Configuration resolve(ModuleFinder before, List<Configuration> parents, ModuleFinder after, Collection<String> roots) ルート・モジュールのコレクションを解決して構成を作成します。各ルート・モジュールは、指定された
before
モジュール・ファインダを使用して配置されます。 モジュールが見つからない場合は、反復順序で各親に対してfindModule
メソッドを呼び出すかのように、親構成に配置されます。 見つからない場合、モジュールは指定されたafter
モジュール・ファインダを使用して配置されます。 推移的依存関係の検索には、同じ検索順序が使用されます。 親構成にあるルート・モジュールまたは依存関係は、それ以上解決されず、結果の構成には含まれません。すべてのモジュールが列挙されると、可読性グラフが計算され、モジュールのエクスポートおよびサービスの使用とともに、整合性がチェックされます。
次のobservability-relatedの理由で、
FindException
で解決できないことがあります:ルート・モジュール、または直接的または推移的な依存関係が見つかりません。
モジュールの検索中にエラーが発生しました。 考えられるエラーには、I/Oエラー、モジュール記述子(
module-info.class
)の解析で検出されたエラー、または同じモジュールの2つのバージョンが同じディレクトリにあります。
次の整合性チェックのいずれかが失敗した場合、
ResolutionException
で解決が失敗することがあります:サイクルが検出されます。たとえば、モジュール
m1
にはモジュールm2
が必要で、m2
にはm1
が必要です。モジュールは、同じ名前の複数のモジュールを読み取ります。 これには、モジュールが自身と同じ名前の別のモジュールを読み取る場合も含まれます。
構成内の複数のモジュールは、同じパッケージを両方を読み取るモジュールにエクスポートします。 これには、パッケージ
p
を含むモジュールM
が、p
をM
にエクスポートする別のモジュールを読み込む場合も含まれます。モジュール
M
は、"uses p.S
"または"provides p.S with ...
"を宣言しますが、パッケージp
は、M
が読み取るモジュールによって、モジュールM
内に存在することも、M
にエクスポートされることもありません。
- 実装上のノート:
- 実装では、モジュールの可観測性は、特定のオペレーティング・システムまたはアーキテクチャの緊密に結合されたモジュールまたはモジュールの異なるビルドが同じ構成で結合されていないことを確認する参照整合性またはその他のチェックに依存することがあります。
- パラメータ:
before
- モジュールを見つける前のモジュール・ファインダparents
- 検索順序のリストの親構成after
-before
モジュール・ファインダまたは親構成で見つからない場合にモジュールを見つけるためのモジュール後のファインダroots
- 解決するモジュールのおそらく空のモジュール名の集合- 戻り値:
- 指定されたルート・モジュールを解決した結果の構成
- 例外:
FindException
- 上記で特定された観察可能性の理由のいずれかで解決が失敗した場合ResolutionException
- 上記で指定された一貫性チェックのいずれかが失敗した場合IllegalArgumentException
- 親のリストが空の場合、またはリストに、異なるターゲット・オペレーティング・システム、アーキテクチャまたはバージョンのモジュールを持つ複数の親がある場合SecurityException
- セキュリティ・マネージャによってモジュールの位置が拒否された場合
-
resolveAndBind
public static Configuration resolveAndBind(ModuleFinder before, List<Configuration> parents, ModuleFinder after, Collection<String> roots) サービス・バインディングを使用してルート・モジュールのコレクションを解決し、構成を作成します。このメソッドは、解決されたモジュールのグラフがサービス使用依存関係によって誘起されるモジュールで拡張されることを除き、
resolve
で指定されたとおりに機能します。具体的には、ルート・モジュールは、
resolve
を呼び出すように解決されます。 解決されたモジュール、および親構成内のすべてのモジュールが、service dependences
で検査されます。 与えられたモジュールが見つけたすべてのモジュールは、provide
が1つ以上のサービス・タイプの実装をモジュール・グラフに追加し、resolve
メソッドを呼び出しているかのように解決します。 モジュールをモジュール・グラフに追加すると、新しいサービス使用依存関係が発生する可能性があるため、モジュールが追加されなくなるまでプロセスは反復的に機能します。サービス・バインディングは解決を伴うので、
resolve
で指定されたのと全く同じ理由で、FindException
またはResolutionException
で失敗する可能性があります。- パラメータ:
before
- モジュールを見つける前のモジュール・ファインダparents
- 検索順序のリストの親構成after
-before
モジュール・ファインダまたは親構成で見つからない場合にモジュールを見つけるためのモジュール後のファインダroots
- 解決するモジュールのおそらく空のモジュール名の集合- 戻り値:
- サービス・バインディングを使用して指定されたルート・モジュールを解決した結果の構成
- 例外:
FindException
- 静的なresolve
メソッドで指定された可観測性に関連する理由のいずれかで解決が失敗した場合ResolutionException
- 解決がstaticresolve
メソッドで指定された整合性チェックに失敗した場合IllegalArgumentException
- 親のリストが空の場合、またはリストに、異なるターゲット・オペレーティング・システム、アーキテクチャまたはバージョンのモジュールを持つ複数の親がある場合SecurityException
- セキュリティ・マネージャによってモジュールの位置が拒否された場合
-
empty
-
parents
public List<Configuration> parents()この構成の親の変更不可能なリストを検索順に返します。 これが「空の構成」の場合は、空のリストが返されます。- 戻り値:
- この親の構成の、おそらく空の変更不可能なリスト
-
modules
public Set<ResolvedModule> modules()この構成内の解決済モジュールの変更不可能なセットを返します。- 戻り値:
- この構成で解決されたモジュールの、おそらく空の変更不可能なセット
-
findModule
public Optional<ResolvedModule> findModule(String name) この構成で解決されたモジュールを検索するか、この構成にない場合は、parent構成を検索します。 親構成でモジュールを検索することは、モジュールが見つかるか、すべての親が検索されるまで、各親でfindModule
を検索順に呼び出すことと同じです。 「構成ツリー」では、これは深さ優先検索と同等です。- パラメータ:
name
- 見つけられる解決されたモジュールのモジュール名- 戻り値:
- この構成または親構成にこの名前のモジュールがない場合は、指定された名前の解決済モジュール、または空の
Optional
-
toString
-