2017-09-18 12 views
4

モジュールa、モジュールb、モジュールcの3つのモジュールがあります。私は自分のアプリケーションを実行すると、私は次を得る:モジュールAとBはsome.packageをJava 9のモジュールCにエクスポートします

エラーは、ブート層の初期化中に発生した java.lang.module.ResolutionException:モジュールモジュールAとモジュールにモジュール-B 輸出パッケージsome.packageモジュール - c

モジュール-cにはsome.packageがインポートされず、それを修正する方法を考慮して、どういう意味ですか?

+0

したがって、 'module-a'と' module-b'は同じパッケージ 'some.package'をエクスポートします。そして 'some-package'パッケージをインポートしても' module-a'と 'module-b'の両方を必要とする' module-c'は許可されていないようです。かなり理論的には思いませんか?私はそれが設計上の失敗であると考えます。 'export ... to ...'や異なるバージョンを使用すると助けになるかもしれませんが。 –

+2

[Java 9の自動モジュールとのパッケージの競合]の可能な複製(https://stackoverflow.com/questions/42358084/package-conflicts-with-automatic-modules-in-java-9)\t 原因はリンクされた質問と重複しているようです。 – nullpointer

答えて

4

は、あなたが(あなたのケースでモジュールモジュール-B)二つのモジュールを意味し、split packageを作成し、同じパッケージ(some.package)を含有しているように見えます。モジュールシステムでは許可されていません。両方のモジュールをmodule pathに配置すると、パッケージをエクスポートするかどうか、または3つ目のモジュールが他のモジュールに依存するかどうかにかかわらず、このエラーが発生します。

解決方法は、同じパッケージを共有するモジュールを作成しないことです。これは技術的な解決策であるだけでなく、各モジュールが特定の固有のAPIを備えていることを確認することで設計を改善します。

+0

同じパッケージから異なるJARのメソッドへのパッケージレベルのアクセスを妨げるようです。そのような方法はライブラリ間で非常に普及しており、この制限はJava 9ですべて破られています。 – cybersoft

+2

Java 9で壊れていない、クラスパス上で完全に機能します。一方、モジュールとして扱うには、これらの分割を修正する必要があります。 – Nicolai

+0

モジュールパスで古いライブラリを使用することはできません。または、モジュールパスとクラスパスの両方を使用できますか? – cybersoft

関連する問題