私は、Java 9に新しいですし、YouTube上のJavaによるモジュラービデオ講義かかわらつもりでした。彼らはmodularization- 1.ノー行方不明の依存関係2.ノー巡回dependnpcies 3.ノースプリットパッケージの3つのメリットを述べました。
私の知る限り、分割パッケージについて理解しているレッツ・アプリケーションが複数のdependnciesに依存していると言うと言うパッケージabc.pqr.xyzは、よりその1瓶中に存在している聞かせてさ。そして、そのパッケージ内のクラスのいくつかは、他のクラスしばらくjar2からjar1から使用される可能性があります。これは、デバッグが困難になり、実行時にいくつかの問題につながる可能性があります。
ビデオは、モジュール化は、この問題を解決しますと言います。しかし、どのようにそれは私が理解しようとしています何ですか?
のは、モジュール情報の下にありtest.module1があるとしましょう -
module test.module1{
exports abc.pqr.xyz;
}
モジュールの下で別のモジュール2 info-
module test.module2{
exports abc.pqr.xyz;
}
今私のアプリケーションでの発言権を聞かせて私はこれらのmodules-の両方の依存関係を追加しました
module test.myapp{
requires test.module1;
requires test.module2;
}
今再び、私はクラスのいくつかは、これらのモジュールの両方に存在する可能性がある2つのモジュラー依存関係を持っています。だから、実行時にどのようにクラス定義を拾うためにどのモジュールから解決されるのでしょうか?どのようにJavaの9は、分割されたパッケージの問題を回避するのだろうか?
質問で説明したシナリオを使用すると、エラーの読み取りに直面して起動します:
モジュールは
test.myapp
、両方からパッケージを読み込み、test.module1
そしてtest.module2
読みやすさからモジュールのモジュールシステムの状態は次のようにモジュールを使用する上で詳しく説明し、あなたのユースケース(強調鉱山)に興味なければなりません。
モジュールグラフで定義された可読性関係は基礎と信頼構成:モジュールシステム性を保証
- すべての依存性は、正確に1つの他のモジュールによって満たされていること
- モジュールグラフは非環式であること
- すべてのモジュールは、特定のパッケージを定義する最大1つのモジュールで読み込むこと
- そして、同じ名前のパッケージを定義しているモジュールが互いに干渉しません。
モジュールシステムで同じものを意味する利点はよくとして詳述されています
信頼性の高い構成は、単に、より信頼性がありません。それはまた、高速になります。モジュールのコードは、パッケージがそのモジュールまたは正確に1つのモジュールのいずれかで定義されることが保証されていること、パッケージタイプを指すときにそのモジュールによって読み取ら。
特定の型の定義を探している場合は、複数のモジュールや、でそれを検索する必要、それゆえ、ありません全体のクラスパスに沿って、悪いことを。
それはあなたの実装に現在のソリューションである、と述べました
モジュール場合
test.module1
とtest.module2
されている明示的なモジュールは、パッケージの実装を選択することができますabc.pqr.xyz
にそれらのいずれか1か、別のモジュールに両方からそれを引き出しtest.mergeModule
、その後、そのクライアント間の独立したモジュールとして使用することができ、独自の。これらの(またはそれらのいずれか)がある場合に自動モジュール、あなたは利用することができ、クラスパスに延長ブリッジと、このような瓶を聞かせてクラスパス上に残り、無名のモジュールとして扱われ、そのすべてのパッケージのデフォルトの輸出によってものとします。同時に、他のすべての読み込み中に任意の自動モジュールという名前のモジュールはまた、読むために作られている無名のモジュールを。
再度、文書を引用して、あなたの質問に関連付けることができるように、例を挙げて説明するために:
明示的なモジュールcom.foo.app内のコードが公衆タイプを参照している場合
com.foo.bar
、例えば、その型のシグネチャは、クラスパス上まだJARファイルのいずれかのタイプを指し、その後のコードはcom.foo.app
できなくなりますタイプがいるので、そのアクセスにcom.foo.app
缶無名のモジュールに依存しません。これは、処理することによって改善することができる
com.foo.app
クラスパスに関連するJARファイルが自動モジュールとして扱わまたは明示モジュールに変換することができるように、そのコードは、そのような時まで、クラスパスから型をアクセスできるように、一時的に自動モジュールとして。