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