モジュール 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という名前のモジュールを解決します。 解決された各モジュールの名前と、各モジュールが読み取るモジュールの名前を出力します。


    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を必要とし、m2m1を必要とするところで、サイクルが検出されます。

      • モジュールは、同じ名前の2つ以上のモジュールを読み取ります。 これはモジュールがそれ自身と同じ名前の別のものを読み込む場合も含みます。

      • コンフィギュレーション内の2つ以上のモジュールが、同じパッケージを両方を読み込むモジュールにエクスポートします。 これには、パッケージpを含むモジュールMが、pMにエクスポートする別のモジュールを読み込む場合も含まれます。

      • モジュールMは、Mが"uses p.S"または"provides p.S with ..."を宣言しますが、パッケージpはモジュールMにもMにもMが読み取るモジュールによってMにエクスポートされません。

      実装上のノート:
      実装では、モジュールの可観測性は、特定のオペレーティング・システムまたはアーキテクチャの密接に結合されたモジュールまたはモジュールの異なるビルドが同じ構成で結合されないようにする参照整合性またはその他のチェックに依存する場合があります。
      パラメータ:
      before - モジュールを見つける前のモジュール・ファインダ
      parents - 検索順序のリストの親構成
      after - beforeモジュール・ファインダまたは親構成で見つからない場合にモジュールを見つけるためのモジュール後のファインダ
      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で検査されます。 与えられたモジュールが見つけたすべてのモジュールは、provideが1つ以上のサービス・タイプの実装をモジュール・グラフに追加し、 resolveメソッドを呼び出しているかのように解決します。 モジュール・グラフにモジュールを追加すると、新しいサービス使用依存が導入される可能性があるため、モジュールが追加されなくなるまで、プロセスは繰り返し実行されます。

      サービス・バインディングは解決を伴うので、resolveで指定されたのと全く同じ理由で、 FindExceptionまたはResolutionExceptionで失敗する可能性があります。

      パラメータ:
      before - モジュールを見つける前のモジュール・ファインダ
      parents - 検索順序のリストの親構成
      after - beforeモジュール・ファインダまたは親構成で見つからない場合にモジュールを見つけるためのモジュール後のファインダ
      roots - 解決するモジュールのおそらく空のモジュール名の集合
      戻り値:
      指定されたルート・モジュールをサービス・バインディングで解決した結果の構成
      例外:
      FindException - 静的なresolveメソッドで指定された可観測性に関連する理由のいずれかで解決が失敗した場合
      ResolutionException - 解決がstatic 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)
      この構成で解決されたモジュールを検索するか、この構成でない場合はparent構成を検索します。 親構成でモジュールを見つけることは、モジュールが見つかるまで、またはすべての親が検索されるまで、各親で、検索順にfindModuleを呼び出すのと同じです。 「構成ツリー」では、これは深さ優先探索と同じです。
      パラメータ:
      name - 見つけられる解決されたモジュールのモジュール名
      戻り値:
      指定された名前を持つ解決されたモジュール、またはこの構成またはこの親構造にこの名前のモジュールがない場合は空の Optional
    • toString

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