web-dev-qa-db-ja.com

モジュール宣言でrequiresとrequiresstaticの違いは何ですか

requiresrequires staticモジュール宣言のモジュールステートメント?

例えば:

module bar {
    requires Java.compiler;
    requires static Java.base;
}
18

requires句は、コンパイル時および実行時に必要なモジュールが必要であることを表します。その結果、モジュールシステムが モジュール解決 (モジュール記述子が処理され、依存関係が解決されるフェーズ)中にそのような句に遭遇すると、監視可能なモジュールのユニバース(JDK内およびJDK内のモジュール)を検索します。モジュールパス)、モジュールが見つからない場合はエラーをスローします。

requires static句は 実行時にオプションの依存関係 を表します。つまり、コンパイル時に、モジュールシステムは上記とまったく同じように動作します。

一方、実行時には、requires static句はほとんど無視されます。遭遇した場合、はそれを解決しません。つまり、監視可能なモジュールがrequires staticでのみ参照されている場合、モジュールグラフには含まれません。これは最初は少し意外かもしれません。一方、モジュールが他の方法でグラフにそれを作成する場合(他のモジュールで必要、 --add-modulesで手動で追加サービスバインディングによって描画される) )、オプションの依存関係を持つすべてのモジュールは 読み取り それを行うことができます。

18
Nicolai

2つの主な違いは、

requires static foo.module;

依存関係は、コンパイル中の静的フェーズでは必須ですただし、動的フェーズではオプションです実行中は、

requires bar.module;

モジュールが名前で他のいくつかのモジュールに依存していることを宣言するために追加されましたコンパイル時と実行時の両方で

2
Naman