15

developer私は 2 つの個別のプロファイルを定義する Maven プロジェクトを持っていますrelease。これら 2 つのプロファイルのいずれかをいつでもアクティブにしたいのですが、両方をアクティブにすることはできません。両方が何らかの理由でアクティブ化されている場合、このビルドは意味がなく、失敗するはずです。どちらもアクティブ化されていない場合、このビルドも意味がなく、失敗するはずです。

これを達成するためにカスタムプラグインコードを書くことができると確信しており、そのようになる可能性が非常に高いですが、POM構成を使用してこれを達成することに興味があります(Maven Centralの既存のプラグインを使用する可能性があります)。

-P( --activate-profiles)を使用してプラグインをアクティブ化できるはずなので<activation>、プロパティを使用しても有効な解決策にはなりません。を使用したソリューションactiveByDefaultも有効ではありません。これactiveByDefaultは、一般に落とし穴として知られており、信頼性が低いためです (実際には、他のプロファイルをアクティブにしてactivateByDefault使用できなくなる可能性があります)。

あなたの提案は大歓迎です。

4

5 に答える 5

3

私はいつも次のようなビルド コマンドを発行します。

mvn package -P-dev,prod

dev プロファイルを明示的に無効にし、本番プロファイルを有効にします。私の知る限り、別のビルド プロファイルがアクティブな場合に条件付きで有効にすることはできません (これは少し残念です)。そのため、プロファイルが相互に排他的であることを保証できません。

于 2014-07-20T23:08:02.640 に答える
3

この種の問題の最も簡単な解決策は、2 つ以上のプロファイルの少なくとも 1 つを強制的にアクティブにするようなルールを正確に持つmaven-enforcer-pluginを使用することです。

残念ながら、requireActiveProfile には現在バグがあります。しかし、現在、これを解決する新しいリリースの準備が進行中です。

更新上記のバグは、リリース 1.4 (2015 年にリリース) で修正されました。

于 2014-07-21T09:59:07.157 に答える
1

このルールのもう少し高度なバージョンが必要でした。結局自分で書きました。次の 2 つのルールを含むパッチを提出しました。

  • 相互に排他的なプロファイルのセットを指定する機能 (p1,p2:p1,p3 は、p1 が p2 または p3 のいずれともアクティブにできないことを意味します)。

  • プロファイルを禁止する機能 (の逆requireActiveProfile)。p1, p2 は、このビルドで p1 も p2 もアクティブにできないことを意味します。

これらのルールは両方ともワイルドカードをサポートし、継承されたプロファイルも考慮します。これらは、ルールの v1.4 に基づいて構築されています。

http://jira.codehaus.org/browse/MENFORCER-225

于 2015-02-21T18:46:44.197 に答える