8

子モジュールの 1 つがリリースの一部として実行される追加の目標を必要とするマルチモジュール Maven ビルドがあります。しかし、子モジュールの 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>

では、子モジュールが親の構成をオーバーライドして追加の目標を追加することは可能ですか?

Maven バージョン 2.2.1

4

2 に答える 2

13

使用する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>

詳しくはこちらのブログをご覧ください

于 2011-08-05T16:39:47.590 に答える
4

はいといいえ。確かに、子pomは、その親によって指定されたプラグインの構成をオーバーライドできます。実際に難しいことは何もないので、正しく行ったと想定する必要があります。の出力を確認するmvn help:effective-pomと、このモジュールのリリースプラグインの設定が異なることがはっきりとわかります。

あなたが抱えている問題は、リリースプラグインの動作にあります。通常、プロジェクトのルートモジュールから目標またはフェーズを実行する場合(mvn compileたとえば、プロジェクトのルートモジュールから)、最初にその目標/フェーズをルートモジュールで実行し、次にすべてのモジュールでリアクターの順序で実行します。 d各モジュールで自分で実行します。子モジュールに追加したカスタマイズは、期待どおりに有効になります。リリースプラグインを実行すると、実行されるのルートモジュールで。どの子モジュールでも実行されません。代わりに、ルートモジュールで実行すると、ルートモジュールと同じ設定を使用して新しいビルドがフォークされます。これは、すべてのモジュールに対してルートモジュールの構成を使用することを除いて、他のすべてのモジュールに対してほぼ同じ方法で実行されます。正確なセマンティクスはわかりませんが、これは、各子でリリースゴールを手動で実行し、コマンドラインでシステムプロパティとして構成オプションを指定することに類似していると思います。子モジュールがリリースプラグインを構成する方法に関係なく、コマンドライン引数が優先されます。

私はこの問題に自分で対処したことはありません。あなたが何を達成しようとしているのかを正確に知らずに言うのは難しいです。おそらく、この特別なモジュールでやりたいことをプロファイルとして表現できる場合は、goalsおよびまたはにプロファイルを追加できますpreparationGoals。あるいは、いくつかのトリックを引き出すことができるかもしれない目標を準備して実行するためのargumentsオプションがあります。

于 2011-08-03T02:30:38.893 に答える