私はmavenマルチモジュールプロジェクトを持っています(男の子、私はこのオープニングwayをこのサイトで何度も書きました)。ほとんどすべてのモジュール(つまり、codeが含まれているモジュール)がmaven-site-pluginを実行して、コードカバレッジなどに関するレポートを生成する必要があります。これらには、詳細な共有構成があります-どのレポートを実行するか、どのファイルを特定のプラグイン用にカバー/除外するかなどです。
ただし、パッケージ化を扱ういくつかのモジュールがあります-アセンブリプラグインを実行してtarballを生成するなどです。これらは、サイトレポートを実行しても何も得られません-分析するコードも、レポートするテストもありません。
だから私はプラグイン設定を共有するを必要とする多くのモジュールとプラグインを実行しないを必要とするいくつかのモジュールがあります。親POMの<build>
セクションにプラグインを配置すると、前者(共有構成)を実行できますが、この場合、必要なときにプラグインをオフにできないようです。構成を各モジュールの独自のPOMにプッシュする場合、後者を実行できます(プラグインの実行は避けます)が、この場合、構成情報を共有するための適切な方法がわかりません。
私が欲しいのは-子モジュールによって時々無効にされるプラグインのための共有設定-さえ可能ですか?もしそうなら、どうですか?
「プラグインを実行する」とは、プラグインがライフサイクルフェーズにバインドされていることを意味し、一部のモジュールでプラグインをアンバインドしたいと考えています。最初に、プラグインを必要としないモジュールに1つの親があり、別の親を持つモジュールがあるようにPOM継承を変更することを検討できます。これを実行したくない場合は、子モジュールで実行フェーズを明示的に「なし」に設定できます。例えば。次のような親pom構成がある場合:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>i-do-something</id>
<phase>initialize</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
... lots of configuration
</configuration>
</execution>
</executions>
</plugin>
次に、子モジュールでこれを行うことができます:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>i-do-something</id>
<phase/>
</execution>
</executions>
</plugin>
これは同じプラグインと同じ実行IDであるため、親で指定された構成をオーバーライドし、プラグインは子プロジェクトのフェーズにバインドされません。
親pomで抑制したい実行がid
でタグ付けされている場合、Ryan Stewartの回答が機能します。ただし、親pomが実行にid
のタグを付けていない場合(そしてもちろん、その親pomを編集できない場合)、次の操作を行うと、親pomのアクションが抑制されることがわかりました。
none
に設定しますid
を指定して、必要な処理を実行します。mvn help:effective-pom
を実行して、必要なものを親pomから正しく抑制したことを確認します。次に例を示します。これは、私の親のpomが次のようになったものです。
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<inherited>true</inherited>
</plugin>
目標をjar-no-fork
に変更する必要がありました。親pomでの実行には、無効にするために使用できるid
がないことに注意してください。だからここに私の子供ポンポンに追加されたものです:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<phase>none</phase>
</execution>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
結果として、これはeffective-pomがどのように見えるかです:
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<phase>none</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<archive>
<compress>false</compress>
</archive>
</configuration>
</execution>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
<configuration>
<archive>
<compress>false</compress>
</archive>
</configuration>
</execution>
</executions>
<inherited>true</inherited>
<configuration>
<archive>
<compress>false</compress>
</archive>
</configuration>
</plugin>
これにより、目標jar
が実行されず、目標jar-no-fork
のみが実行されることが保証されました。これは、私が達成したかったことです。