モジュール java.base
パッケージ java.lang.module

クラスConfiguration

java.lang.Object
java.lang.module.Configuration

public final class Configuration extends Object
resolutionまたは「サービス・バインディング」による解決の結果である構成。

構成は、解決の出力である「可読性グラフ」をカプセル化します。 可読性グラフは頂点が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
関連項目:
  • メソッドの詳細

    • 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 - 解決がstatic resolveメソッドで指定された整合性チェックに失敗した場合
      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 - 解決がstatic resolveメソッドで指定された整合性チェックに失敗した場合
      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が、pMにエクスポートする別のモジュールを読み込む場合も含まれます。

      • モジュール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 - 解決がstatic resolveメソッドで指定された整合性チェックに失敗した場合
      IllegalArgumentException - 親のリストが空の場合、またはリストに、異なるターゲット・オペレーティング・システム、アーキテクチャまたはバージョンのモジュールを持つ複数の親がある場合
      SecurityException - セキュリティ・マネージャによってモジュールの位置が拒否された場合
    • empty

      public static Configuration empty()
      empty構成を返します。 空の構成にモジュールがありません。 両親はいません。
      戻り値:
      空の構成
    • parents

      public List<Configuration> parents()
      この構成の親の変更不可能なリストを検索順に返します。 これが「空の構成」の場合は、空のリストが返されます。
      戻り値:
      この親の構成の、おそらく空の変更不可能なリスト
    • modules

      public Set<ResolvedModule> modules()
      この構成内の解決済モジュールの変更不可能なセットを返します。
      戻り値:
      この構成で解決されたモジュールの、おそらく空の変更不可能なセット
    • findModule

      public Optional<ResolvedModule> findModule(String name)
      この構成で解決されたモジュールを検索するか、この構成にない場合は、parent構成を検索します。 親構成でモジュールを検索することは、モジュールが見つかるか、すべての親が検索されるまで、各親でfindModuleを検索順に呼び出すことと同じです。 「構成ツリー」では、これは深さ優先検索と同等です。
      パラメータ:
      name - 見つけられる解決されたモジュールのモジュール名
      戻り値:
      この構成または親構成にこの名前のモジュールがない場合は、指定された名前の解決済モジュール、または空の Optional
    • toString

      public String toString()
      この構成を説明する文字列を返します。
      オーバーライド:
      toString、クラスObject
      戻り値:
      この構成を記述する空の文字列