2016-06-29 18 views
3

現在、mavenモジュール構造を試しています。私は以下の構造を有する瞬間 :AはBに依存し、BがCとA、B、Cは、別個のMavenのモジュールであるに依存依存関係の依存関係へのアクセスを禁止する方法

A -> B -> C 

BがCに依存することを隠すことができるので、Aはパブリック関数を直接呼び出すことも、Cからオブジェクトをインスタンス化することもできません。

答えて

3

CにBの依存関係を<optional>true</optional>としてマークすることができます。これは、Mavenがこの依存関係を過渡的に解決するのを防ぐので、Aは推移的にCに依存しません。これは、Aが構築されると、AがCへの明示的な依存関係を定義しない限り、クラスパスにCをまったく持たないことを意味します。

もちろん、AがCに明示的な依存関係を定義すると、Mavenはそれを追加します。 Mavenはビルドツールであり、Aが明示的にCにアクセスするのを防ぐことができるセキュリティフレームワークではありません。

また、<scope>provided<scope>は異なる意味を持ちますが、推移的な依存性に関しても同様に機能します。

+0

多くのおかげで、これはまったく同じように動作します。 – FelixZett

+0

ようこそ。ただし、この機能に関するドキュメントをお読みください。これを使用すると、プロジェクトを正しく構成していない可能性があります。おそらく、より「メイニー」なアプローチは、Bを2つの部分、すなわちC(B1)を必要とする部分とそうでない部分(B2)に分割することです。 AとB1は、どちらもB2に依存します。 –

+0

AがAのオブジェクト(B内)を実際にはCのクラスのインスタンス(Bでも)で取得した場合、ClassNotFoundExceptionが存在することに気付きました。 – FelixZett