2017-10-03 5 views
7

との差が、は、モジュール宣言で静的モジュール文を必要とする必要がありますか?例えば違いは何

module bar { 
    requires java.compiler; 
    requires static java.base; 
} 
+3

[Java 9モジュールシステムはオプションの依存関係をサポートしていますか?](https://stackoverflow.com/questions/39900460/does-the-java-9-module-system-support-options-dependencies) – ZhekaKozlov

+1

@ ZhekaKozlov私は重複投票をサポートしていますが。しかし、リンクされたポストが2つの間の*違い*を示しているかどうかはあまり確かではありません。とにかく、私はこの質問の背後にある主な動機は、 'require'命令自体の' static '修飾子について知ることであるとも考えています。 – nullpointer

+1

私はこれが重複しているとは思わない。どちらの質問も同じトピックを扱っていますが、それらは非常に異なる角度を持っています。ここでのこの質問は、構文を検索している人、依存関係をオプションにする必要がある人が見つけたものです。 – Nicolai

答えて

7

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になります。

3

両者の主な違いは

requires static foo.module; 

の場合に依存性は、コンパイル時に、静的位相で必須であるが、に任意であることです動的フェーズ、実行中その他の場合

requires bar.module; 

モジュールがコンパイル時と実行時の両方で、他のモジュールに名前で依存することを宣言するには、が追加されます。

関連する問題