@リッチセラーの答えと@ボストンの自己回答を拡大するには、親POMが定義する設定をすることは不可能であるようです代替案としてのいくつかのプロファイル、および子POMはデフォルトでこれらのプロファイルの1つを選択し、一時的に(CLI上の)子供の選択を無効にすることができます。そのバージョン我々が想定できるの両方がプロパティによって定義され、いくつかのフレームワークと関連したプラグインを使用するプロジェクトの親POMを考えてみましょう:
<profiles>
<profile>
<id>newest</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<framework.version>2.0</framework.version>
<plugin.version>2.0</plugin.version>
</properties>
</profile>
<profile>
<id>older</id>
<activation>
<property>
<name>older.framework</name>
<value>true</value>
</property>
</activation>
<properties>
<framework.version>1.1</framework.version>
<plugin.version>1.1</plugin.version>
</properties>
</profile>
</profiles>
あなたと同じように、デフォルトでこの親POMから継承する子供は2.0を使用します。 -Polder
または-Dolder.framework=true
は、古いフレームワーク(例:互換性をテストする)でビルドしようとします。しかし、あなたは子供POM
<properties>
<older.framework>true</older.framework>
</properties>
で書くとolder
プロファイルが自動的に起動することはできません。 newest
がデフォルトでアクティブではない場合、ファイルベースのアクティブ化を使用して1.1に対してビルドを行うことができますが、2.0に対して一時的に実行するのは容易ではありません:私が知る限り、older
とnewest
の両方のプロファイルがアクティブになります。 -Pnewest
を渡したので、明示的に他のプロファイルを無効にする必要があります。あなたが-Dframework.version=2.0 -Dplugin.version=2.0
を使用する必要があるので、ポイント-Pnewest
がない仕事は、これらのプロパティをオーバーライドするだろう
<properties>
<framework.version>1.1</framework.version>
<plugin.version>1.1</plugin.version>
</properties>
れる:だから子POMにプロファイル情報をコピーする以外だけで解決策はありません。
つまり、プロファイルはすべての子モジュールがデフォルトで同じプロファイル(ここではnewest
)を使用できる場合にのみ便利です。それらのうちのいくつかが通常1.1でビルドされていて、2.0でビルドされているものがあれば、そのプロファイルは役に立たない。
Mavenコアエンハンスメント、またはおそらくMaven 3ビルド拡張のユースケースです。 http://docs.codehaus.org/display/MAVEN/Custom+Profile+Activatorsとhttps://github.com/maoo/maven-tilesが気になります。
を参照するのが大好きですね。私はそれが私の答えを構築し、私は一般的に自分自身を受け入れるのが好きではないので、これを受け入れている – Bostone
非常に有用な情報。そしてファイルベースのアクティブ化についてのヒントをお寄せいただきありがとうございます。私の問題を非常にきれいに解決しました。 – Allan