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


115

異なるプロファイルのmaven pom.xmlファイルで異なる依存関係のセットを持つことは可能ですか?

例えば

mvn -P debug
mvn -P release

同じクラス名と同じインターフェースの異なる実装を持つ1つのプロファイルで、異なる依存関係jarファイルを取得したいと思います。


これは、異なるWebサーバーを対象とする場合に使用できます。たとえば、WARファイルに含めるべきではないJAXBなどのライブラリを提供するJavaEE 5サーバー用にビルドする場合と、JAXB jarを含める必要があるJavaEE 1.4サーバー用にビルドする場合とでは、
レオネル

回答:


174

これに関するMavenドキュメントを引用するには:

プロファイル要素には、オプションのアクティブ化(プロファイルトリガー)と、そのプロファイルがアクティブ化されている場合にPOMに行われる一連の変更の両方が含まれます。たとえば、テスト環境用にビルドされたプロジェクトは、最終的なデプロイメントのデータベースとは異なるデータベースを指す場合があります。または、使用されているJDKバージョンに基づいて、異なるリポジトリから依存関係をプルすることもできます

(エンファシスは私のものです)

releaseプロファイルの依存関係をプロファイル宣言自体の中に入れて、についても同じようにしdebugます。

<プロフィール>
    <プロフィール>
        <id>デバッグ</ id>
        …
        <依存関係>
            <dependency>…</ dependency>
        </依存関係>
        …
    </プロフィール>
    <プロフィール>
        <id>リリース</ id>
        …
        <依存関係>
            <dependency>…</ dependency>
        </依存関係>
        …
    </プロフィール>
</プロフィール>

2
このメソッドは、編集モードで未解決のコードを引き起こします。デバッグがアクティブな場合、リリースの依存関係jarが欠落し、コードはエラーになります。それを解決するには?
ブルースナン2016

6
依存関係の階層でリリース固有の依存関係のスコープを「提供」として設定し、リリースプロファイルセクションでスコープを「コンパイル」にリセットできます。そのため、依存関係はコンパイルでは使用できますが、「デバッグ」プロファイルの最終戦争では使用できません。
2017

@udayもしあなたがそのアプローチを示す回答を載せるなら、私はそれを
賛成し

IMHOプロファイルは、少なくとも依存関係には役に立たない:IDEはエラーを出し、依存関係は解決を停止し、アプリケーションは最終的に機能しません。もっと期待していました。
アレス

6

groupId、artifactIdは、プロファイルとしてプロパティとしてトークン化する必要があり、依存関係をジェネリックセクションに移動できます。


2
これは、1つの依存関係がある場合にのみ当てはまります。依存関係の数がデバッグとリリースで異なる場合、トークン化は機能しません。そのため、私はトークン化せず、プロファイルセクションで明示的にdepを定義しないことをお勧めします。
Marcel Overdijk 2013

他の特定のプロファイルの依存関係と共にデフォルトのプロファイルの依存関係がまだ含まれているため、他の答えは私にはうまくいきませんでした。あなたの答えはうまくいきました。
Vlad Mihalcea 14

@Vlad POMの本体から依存関係を削除しましたか?それ以外の場合は、2回になります。(1つのプロファイルが常にアクティブであることを確認する方法については、stackoverflow.com
q / 24855678/6944068を
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.