との差が、とは、モジュール宣言で静的モジュール文を必要とする必要がありますか?例えば違いは何
:
module bar {
requires java.compiler;
requires static java.base;
}
との差が、とは、モジュール宣言で静的モジュール文を必要とする必要がありますか?例えば違いは何
:
module bar {
requires java.compiler;
requires static java.base;
}
requires
句は、コンパイルと実行時に必要なモジュールが必要であることを表しています。したがって、モジュールシステムがmodule resolution(モジュール記述子が処理され、依存関係が解決されるフェーズ)の間にこのような節が見つかると、観測可能なモジュール(JDK内のモジュールとモジュールパス)のユニバースを検索し、ifモジュールが見つかりません。
requires static
句は、a dependency that is optional at run timeを表します。つまり、コンパイル時に、モジュールシステムは上記のように正確に動作します。
実行時には、ほとんどの場合、requires static
句が無視されます。それに遭遇した場合、は解決しません。つまり、観測可能なモジュールがrequires static
でしか参照されていない場合は、それをモジュールグラフに入れません!これは最初は少し驚くかもしれません。一方、モジュールが他のモジュール(別のモジュールであるadded manually with --add-modules
が必要、service bindingが必要)でグラフに入れると、依存関係のあるモジュールはすべてreadになります。
両者の主な違いは
requires static foo.module;
の場合に依存性は、コンパイル時に、静的位相で必須であるが、に任意であることです動的フェーズ、実行中その他の場合
requires bar.module;
モジュールがコンパイル時と実行時の両方で、他のモジュールに名前で依存することを宣言するには、が追加されます。
[Java 9モジュールシステムはオプションの依存関係をサポートしていますか?](https://stackoverflow.com/questions/39900460/does-the-java-9-module-system-support-options-dependencies) – ZhekaKozlov
@ ZhekaKozlov私は重複投票をサポートしていますが。しかし、リンクされたポストが2つの間の*違い*を示しているかどうかはあまり確かではありません。とにかく、私はこの質問の背後にある主な動機は、 'require'命令自体の' static '修飾子について知ることであるとも考えています。 – nullpointer
私はこれが重複しているとは思わない。どちらの質問も同じトピックを扱っていますが、それらは非常に異なる角度を持っています。ここでのこの質問は、構文を検索している人、依存関係をオプションにする必要がある人が見つけたものです。 – Nicolai