8

コマンド ラインから特定の目標を実行するときに、プロファイルを「自動的に」有効にしたいと考えています。

たとえば、私が今していること:

mvn appengine:devserver -Pdevelopment

mvn appengine:update -Pproduction

基本的に、devserver ゴールを実行するときに、開発プロファイルを自動的に有効にしたいと考えています。更新目標を実行するときにアクティブにしたい運用プロファイルについても同じです (-P オプションを使用して明示的にオーバーライドされない限り)。

これは可能ですか?

4

2 に答える 2

6

Maven モデル、プロファイルがbuildを含むさまざまな要素で構成されていることを示しています。次の例のように: -

<profile>
    <id></id>
    ...
    <build>
        <plugins>
           <plugin></plugin>
           ...
        </plugins>
    </build>
</profile>

上で見たように、 はprofileを制御しpluginます。それでは、あなたの質問に対する答えはノーです。pluginをアクティブにすることはできませんprofile

これが役立つことを願っています。

于 2013-04-12T07:28:59.720 に答える
3

これはできないという前の結論に同意します。前に見た推論は少し後ろ向きかもしれません。

プラグインは、プロファイルにあるプラグインによってではなく、コマンドラインでゴールを定義することによってアクティブ化されます (この質問の特定のケース)。

plugin.configurationこの方法でオーバーライドしようとしているのは、特定の実行の構成 ( ) ではなく、おそらくプラグインのデフォルト構成 ( ) ですplugin.executions.execution.configuration。そして、それは私によってうまくいきます。しかし、問題はプロファイルを有効にすることです。

コマンドラインにあるのが目標だけである場合(例appengine:update、プロファイルをアクティブにする方法はありません

プロファイルのアクティブ化に関する議論を読むと (私は過去に頑固に多くのことを行ってきました)、プロファイルのアクティブ化に関して多くの人々がまだ多くのことを望んでいることがわかります。実行された目標に基づいてプロファイルをアクティブ化することは、私がまだ出会った欲求でさえありません。

また、自分がやろうとしていることが本当に適切かどうか疑問に思うかもしれません。あなたは本当に目標を実行する必要がありますか? それともMaven ライフサイクルの恩恵を受けることができますか?


Maven ライフサイクルは実際には、フェーズを通過する、完了への (まっすぐな) パスです。特定の条件に基づいてこのパスを流用したい場合は、プロファイルが最適です。appengine:updateとが「どちらか/または」である場合appengine:devserver(そうであると私は信じています)、パスを迂回しており、実際にはプロファイルを使用する必要があり、コマンドラインに少なくとも 2 つのもの、つまりフェーズと希望のプロファイル。1 つの典型的なケースと 1 つの例外的なケースがある場合、デフォルト プロファイルのアクティブ化 ( activeByDefault) と別のプロファイルの明示的な選択 ( -P) でそれぞれ表現できます。

mvn deploy // choose default profiles
mvn deploy -Pproduction // ignore default profiles

両方を実行したい場合 (例:devserver統合テスト フェーズ中とデプロイ中)、ライフサイクルは、その後に関連付けられているupdateプラ​​グインを介して実行するように構成できます。コマンドラインにはただ 1 つのもの、つまりフェーズがあります。executionsphase

于 2013-04-12T08:14:00.867 に答える