モジュール java.base
パッケージ 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
    • メソッドの詳細

      • 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が、pMにエクスポートする別のモジュールを読み取る場合が含まれます。

        • モジュール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
      • toString

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