2011-06-10 11 views
8

子モジュールの1つがリリースの一部として追加の目標を必要とするマルチモジュールのビルドがあります。しかし、子モジュール内のmaven-release-pluginの設定は、親モジュールのデフォルト設定を無視して無視されるように見えます。1つの子モジュールでmaven-release-pluginの設定を上書きする方法

これは、子モジュールのスニペットです。プラグインの設定は、親のpomのpluginManagementセクションでは同じですが、カスタム要素はありません。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-release-plugin</artifactId>  
    <version>2.1</version> 
    <configuration> 
     <tagBase>http://mycompany.com/svn/repos/myproject/tags</tagBase> 
     <goals>deploy myCustomPlugin:myCustomGoal</goals> 
    </configuration> 
</plugin> 

子モジュールが親の設定を上書きし、余分な目標を追加することは可能ですか?

メイプルバージョン2.2.1

答えて

2

はい、いいえ。確かに、子供のpomはその親によって指定されたプラグインの設定を無効にすることができます。本当に難しいことはないので、あなたは正しく行ったと仮定しなければなりません。 mvn help:effective-pomの出力を確認すると、このモジュールにリリースプラグインの設定が異なることが分かります。

問題は、リリースプラグインの動作にあります。通常、目標またはフェーズを実行する場合(mvn compileなど)、プロジェクトのルートモジュールからルートモジュールでその目標/フェーズを実行した後、すべてのモジュールを原子炉順に実行します。それぞれのモジュールで自分で実行してください。子モジュールに追加したカスタマイズは、期待どおりに有効になります。リリースプラグインを実行すると、がルートモジュールでのみ実行されます。どの子モジュールでも実行されません。代わりに、ルートモジュールでルートモジュールを実行すると、ルートモジュールと同じ設定を使用して新しいビルドが作成されます。ルートモジュールは、すべてのモジュールに対してルートモジュールの構成を使用する点を除いて、ほぼ同じ方法で他のすべてのモジュールに対して実行されます。正確なセマンティクスはわかりませんが、これは手動で各子供のリリース目標を実行し、コマンドラインでシステムプロパティとして設定オプションを指定するのと似ていると思います:子モジュールがリリースプラグインをどのように設定するか、コマンドラインargs win。

私はこの問題を自分で処理したことは一度もありません。あなたが達成しようとしていることを正確に把握していないと言うのは難しいです。おそらく、この特別なモジュールで何をしたいかをプロファイルとして表現できれば、goalsおよび/またはpreparationGoalsにプロファイルを追加することができます。また、準備と実行の両方の目標にはarguments optionがあります。これにより、いくつかのトリックを引き出すことができます。

11

使用combine.children="append"combine.self="override"

親POM

<configuration> 
    <items> 
    <item>parent-1</item> 
    <item>parent-2</item> 
    </items> 
    <properties> 
    <parentKey>parent</parentKey> 
    </properties> 
</configuration> 

児童ポンポン

<configuration> 
    <items combine.children="append"> 
    <!-- combine.children="merge" is the default --> 
    <item>child-1</item> 
    </items> 
    <properties combine.self="override"> 
    <!-- combine.self="merge" is the default --> 
    <childKey>child</childKey> 
    </properties> 
</configuration> 

結果

<configuration> 
    <items combine.children="append"> 
    <item>parent-1</item> 
    <item>parent-2</item> 
    <item>child-1</item> 
    </items> 
    <properties combine.self="override"> 
    <childKey>child</childKey> 
    </properties> 
</configuration> 

詳細についてthis blog

+0

タフ効果的なポンポンが...今のところうまく – mschonaker

+0

ハズレを取り組んできました。を参照してください。これは私にとってはうまくいかなかった。 – mschonaker

+1

ブログによると、Maven 3.0.2が必要です(OPはMaven 2を使用しています)。私がデフォルトのマージ動作を理解するのを助けたブログリンクの場合は+1 –

関連する問題