1

アプリケーション サーバー内で使用するプロジェクトとスタンドアロン アプリケーションとして使用するプロジェクトのビルドを調整する際に問題があります。

全体的な状況を単純化するために、3 つのプロジェクト A、B、C があるとします。

プロジェクト A は、プロジェクト C に依存するプロジェクト B に依存します。

プロジェクト C には依存関係 X があり、たとえばアプリケーション サーバー内で JEE ライブラリとして利用できると予想されていたため、提供済みとしてマークされています。つまり、jms.jar です。

そのため、プロジェクト A のアセンブリ ビルドを実行すると、期待どおりに提供されているとマークされているものを除いて、すべての推移的な依存関係が取得されます。

現在、プロジェクト A をスタンドアロン環境、つまりアプリケーション サーバーの外部で使用する必要がある新しい展開シナリオがあります。

したがって、jms jar をコンパイルの依存関係にする必要があります。これは、プロジェクト A で X のコンパイル依存関係を明示的に追加する必要があるということですか? これはデメテルの法則、つまり見知らぬ人と話すな、という意味で、プロジェクト A はプロジェクト C について明確に知っているべきではなく、プロジェクト B についてのみ知っているべきであるという意味に違反していませんか?

これは単純な例ですが、実際には複数の依存関係があり、提供済みとしてマークされていますが、コンパイルまたはランタイムの依存関係にする必要があるため、maven アセンブリ プラグインによって生成されるアーティファクトになります。

これは Maven の根本的な問題ですか、それともツールを正しく使用していませんか?

ご指導いただきありがとうございます。

4

2 に答える 2

0

ビルドにさまざまなシナリオのバリエーションを含める必要がある場合は、プロファイルを使用し、さまざまなプロファイルで特定のもの(依存関係の一部など)を保持する必要があります。

http://maven.apache.org/pom.html#Profiles

Mavenのビルドプロファイルごとに異なる依存関係

同様の質問に答えますが、「リリース」と「デバッグ」を「プロジェクトA」と「プロジェクトC」に入れ替えることができます。

于 2011-05-17T15:00:41.750 に答える