2012-04-11 6 views
0

プロジェクトに多数のサブプロジェクトがあり、すべてのサブプロジェクトに共通の親pom.xmlがある場合、すべての依存関係が親のpom.xmlにリストされていないはずですか?mavenサブプロジェクト - 独自の依存関係を持つべきか

サブプロジェクトが独自の依存関係を持つことを許可するポイントは何ですか? 1つのサブプロジェクトでapache_xyzlibrary_1.0.jarが使用され、別のサブプロジェクトで_2.0.jarが使用される可能性があります。

注:すべてのmavenサブプロジェクトが結合されて、単一のWebアプリケーションWARが作成されます。

答えて

3

すべてのプロジェクトの依存関係をすべてのサブプロジェクトに含めるのは非常に非効率的なので、すべてのサブプロジェクトのビルドに効果的に不要な依存関係をもたらします。もう1つの問題は、サブプロジェクト間の依存関係、つまりサブプロジェクトに依存するサブプロジェクトがある場合です。bでは、解決できないサイクル依存性が簡単に終了する可能性があります。

プロジェクト間の依存関係の一貫性を保つため、プロジェクトの親pomの依存関係管理セクションを使用する方法があります。したがって、親pomの依存関係管理セクションにあるすべての依存関係のバージョンのみを設定します。サブプロジェクトのpomには、グループIDとアーティファクトIDのみが記述されています。それが必要でない限り、サブプロジェクトのpomでバージョンタグを使用しないでください(つまり、サブプロジェクトがプロジェクトの残りのバージョンと異なる依存関係を必要とする場合)

+1

親のpomが依存関係の完全な定義(すなわちバージョン番号を含む)を持ち、サブプロジェクトが依存関係を単に "リスト"して、親がバージョンを指示できるようにすると、 。 – rk2010

+0

このプラクティスがより奨励されればいいと思うが、それは強制すべきだと言っても過言ではないかと思う。 Mavenは、多くの場合、何かを達成するためのさまざまな方法を提供します。私は、複数のプロジェクトが同じ依存関係の異なるバージョンを参照している場合、ビルドに警告が表示されると思うので、潜在的に悪い可能性のあることをしているならあなたの顔にあるでしょう。 –

0

すべての子が同じ依存関係を宣言している場合は、代わりにその依存関係を宣言することをお勧めします。すべてのプロジェクトが一貫したバージョンの依存関係を使用するように、これについて正しいです。

なぜMavenの開発者は、同じ依存関係の異なるバージョンを使用できるようにすると、子プロジェクトで依存関係を宣言することを許可したのですか?私は彼らがローカルで宣言されたプロジェクトの依存関係の利点を、兄弟プロジェクトとは異なると考えていると思っていたのですが、すべての子どものすべての依存関係を宣言するように親を制限するよりもうまくいきました。

クラス内の異なるスコープで宣言された変数のように考えてください。あるメソッドにプライベート変数がある場合、それはそのメソッドでのみ使用されており、コードベース全体を心配する必要なしに適切に変更することができます。クラスにプライベートフィールドがある場合は、そのクラスのすべての用途を認識する必要がありますが、他のファイルには認識されません。あなたが公共の変数を持っているなら、あなたはそのアイデアを得るでしょう。依存関係は同じですが、1つのプロジェクトに対して宣言されている場合は、単一のプロジェクトでのみ使用/必要があることがわかります。さらに、同じ親の異なる子プロジェクトを構築する場合は、存在する必要はありません。

あなたがWARを構築するのは正しいですが、異なる子プロジェクトで同じ依存関係の異なるバージョンを使用すると、おそらく最終的な成果物を悲しんでしまうでしょう。他のプロジェクトタイプとビルドサイクルがあることに注意してください。プロジェクト間でバージョン番号が混在していて問題にならず、実際には必要な場合があります。

親のpomファイルにも親があることを覚えておいてください。これにより、階層のレベルを2レベル以上にすることができます。すべての子プロジェクトがトップレベルの親プロジェクトのpomファイルの依存関係を宣言しなければならないのはばかげていると思います。

+0

私は変数スコープの類推に全く同意しません。同じことではない。私は依存関係は "その戦争の親のポン"に記載されるべきだと思う。 (または "耳" ..アーティファクトが何であれ)。あなたはどう思いますか? – rk2010

+0

@ rk2010 - あなたはmavenの依存関係を可変スコープと同じに扱うべきだと思います。スコープを使用して、ある変数に関係するコードのレベルを簡単に判断できます。また、2つの変数が同じ値を使用することを保証したい場合は、同じ変数を参照する必要があります。潜在的に同期が外れる可能性があります。 "私は、依存関係はその戦争の親のポンで列挙されるべきだと思う"と、あなたがあなたの質問を投稿した元の質問を理解したものです。私の答えは私の考えを説明している。 –

関連する問題