2017-05-26 14 views
0

私はJavaモノリスをいくつかの再利用可能なモジュールに分割しています。Maven JARモジュールには、リリースの依存関係が含まれていますか?

私は、依存関係ツリーにいくつかの問題があるかもしれないことを理解し始めています。

のは4つの依存関係を含める単純なプロジェクトを想像してみましょう、私の問題を説明するために:

Proj 
    ProjA 
    ProjB 
    ProjC 
    ProjD 

は私のメインのプロジェクトの依存関係の1想像 - ProjAを - ProjD- - メインプロジェクトの依存関係のいずれかが必要です。

ProjA 
    ProjD 
    ProjF 

クラスパスとその他の依存関係の問題で重複したクラスを防止するためのベストプラクティスは何ですか?

JARモジュールに依存関係を含める必要がありますか?この場合、サブモジュールを書き直して、このケースは起こらないようにしてください。

また、依存関係のないJARモジュールを構築して親「ルート」プロジェクトにのみ含めるべきですか?

+0

私はあなたが達成したいことを理解していません。あなたは瓶や戦争を構築していますか?なぜクラスを複製したいのですか?マルチモジュールプロジェクトは、あるモジュールから別のモジュールへの依存関係を持つことができます(pom.xml内) –

+0

各サブモジュールはsom関連の機能を表すか、おそらくアプリケーション内のレイヤーを表す必要があります。たとえば、ProjAは永続性の境界層です。したがって、ProjB、ProjC、およびProjDはProjAに依存します。従属性を持つことは可能ですが、循環依存性はありません。モジュールが設定されたら、誰かが循環依存を導入しようとすると、mavenは文句を言うべきです。パッケージ構造が明確に定義されている場合は、同じパッケージ内にクラス名**が重複することはありません。異なるパッケージのクラス名が重複していると、コードが重複しているか、クラス名が正しくないことが示唆されます。 –

+0

サイクリック依存関係ではありません。重複したクラスの依存関係。潜在的に異なるバージョンのHibernateへの依存として2つの依存関係を想像してみてください。この問題をどうやって解決しますか? – user3779543

答えて

0

サイクル:サイクルは、依存関係ツリーに存在する場合

Mavenは強調表示されます。サイクルが見られる場合は、モジュールをリファクタリングする必要があります。

ビルド順:

Mavenのは、他のモジュールに依存するモジュールを考慮すべてのモジュールのビルド順序を決定します。したがって、親のpomで指定するモジュールの順序は関係ありません。

CommanサードパーティのLIBS:

あなたが異なるモジュール間で共有されている任意のサードパーティの依存関係を持っている場合は、最良の方法は、親プロジェクトのPOMでその依存関係を維持することです。

+0

あなたのモジュールがいくつかのプロジェクトに分割されていないのは私の理解からです。あなたのモジュールが複数のプロジェクトで共有されている場合、それは標準的な依存関係になります。この依存関係に他のモジュールと競合する依存関係(サードパーティーかどうか)がある場合はどうなりますか?それらをJARに含めますか? – user3779543

+0

はい。モジュールをすぐに使用できるようにするため、それらをモジュールに含める必要があります。あなたのモジュールが他のプロジェクトで使用されているときは、モジュールの推移的な依存関係を受け入れるかどうかを気にする必要があります。ライブラリの衝突の可能性が高いサードパーティのオープンソースフレームワークについては、この規則に従います。 – Shinchan

+0

私は基準を尊重していますが、それは私のケースでは非常に迷惑です。ほとんどのモジュールとプロジェクトには、標準のapache.commonsやhibernateおよび/またはjacksonの依存関係があります。つまり、彼らはこの基準に従って共有することはできません。依存関係のないJARとすべての依存関係を持つ "ubber-JAR"の両方を構築し、プロジェクトのインポート状況に応じて最も有益なJARを組み込むことは大丈夫でしょうか? – user3779543

関連する問題