親POMで定義されたMavenプラグインを無効にする


158

子POMで実行したくないプラグインを定義する親POMを使用しています。子pomでプラグインを完全に無効にするにはどうすればよいですか?

制約:親POM自体は変更できません。

回答:


205

子POMでFindbugsを無効にすると、次のことが機能します。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>ID_AS_IN_PARENT</id> <!-- id is necessary sometimes -->
            <phase>none</phase>
        </execution>
    </executions>
</plugin>

注:Findbugsプラグインの完全な定義は親/スーパーPOMにあるため、バージョンなどを継承します。

Maven 3では、以下を使用する必要があります。

 <configuration>
      <skip>true</skip>
 </configuration>

プラグイン用。


8
これは「正しい」、つまり動作しますが、指定されていない(または少なくとも文書化されていない)機能であることに注意してください。「なし」と呼ばれる公式のフェーズはありません。したがって、そこに「foo」を配置することもできます。
MarcelStör2013年

1
Maven 3の私にとっては、これは機能しません。<skip> true </ skip>のようにbmarguliesの推奨作品
mibutec

10
<id>…</id>親POMの一部を追加する必要があり、それでうまくいきました。
mirabilos 2015年

4
Maven 3ソリューションはプラグインを実際に無効にしませんか?出力によると、プラグインはまだ実行されています。スキップ設定を尊重するかどうか、どのように/何をスキップするかは、個々のプラグイン次第です。
Zero3

10
mirabilosのコメントはMaven 3の正しいソリューションであり、すべてのプラグイン間で移植可能です。すべてのプラグインに<skip>パラメータがあるわけではありません。
ギリ

60

プラグインに「スキップ」構成パラメーターがあるかどうかを確認します。ほぼすべてがそうです。含まれている場合は、子の宣言に追加するだけです。

<plugin>
   <groupId>group</groupId>
   <artifactId>artifact</artifactId>
   <configuration>
     <skip>true</skip>
   </configuration>
</plugin>

そうでない場合は、次を使用します。

<plugin>    
<groupId>group</groupId>   
 <artifactId>artifact</artifactId>    
<executions>
     <execution>
       <id>TheNameOfTheRelevantExecution</id>
       <phase>none</phase>
     </execution>    
</executions>  
</plugin>

作業しているプラ​​グインに名前を付け、help:effective-pomを実行して、本当に正しい実行が行われているかどうかを確認してみてください。
bmargulies '19年

1
プラグインとpluginManagementの違いも確認してください。後者は前者をオーバーライドします。
bmargulies '19年

Coberturaプラグインを使用していますが、子pomで実行したくありません。
tobiasbayer 2011年

2.5ではチェック目標がスキップされます。以前はありませんでした。coberturaゴールにはありません。
bmargulies '19年

チェックだけをスキップするのではなく、プラグイン全体の実行をスキップします。
tobiasbayer 2011年

37

スレッドは古いですが、おそらく誰かがまだ興味を持っています。私が見つけた最も短い形式は、λlexとbmarguliesの例をさらに改善したものです。実行タグは次のようになります。

<execution>
    <id>TheNameOfTheRelevantExecution</id>
    <phase/>
</execution>

私が強調したい2点:

  1. フェーズは何も設定されていません。「ハッキング」ではありますが、「なし」よりもハックが少ないようです。
  2. idは、オーバーライドする実行と同じである必要があります。実行にidを指定しない場合、Mavenは暗黙的に(ユーザーが直感的に予期しない方法で)実行します。

投稿後、それはすでにstackoverflowにあることがわかりました: Mavenマルチモジュールプロジェクトで、1つの子でプラグインを無効にするにはどうすればよいですか?


1
記録のために:デフォルトの実行IDがこの回答にレイアウトされている簡単なルールに従ってください。stackoverflow.com/a/34599117/7641
イェンスBannmann

2
このソリューションは、プラグイン固有の「スキップ」オプションに依存するのではなく、(OPが要求するように)(指定された実行IDの)プラグインを実際に無効することに注意してください。
Zero3

3

私はこのスレッドが本当に古いことを知っていますが、@ Ivan Bondarenkoのソリューションが私の状況で私を助けてくれました。

に次のものがありましたpom.xml

<build>
    ...
    <plugins>
         <plugin>
                <groupId>com.consol.citrus</groupId>
                <artifactId>citrus-remote-maven-plugin</artifactId>
                <version>${citrus.version}</version>
                <executions>
                    <execution>
                        <id>generate-citrus-war</id>
                        <goals>
                            <goal>test-war</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    </plugins>
</build>

私が欲しかったのgenerate-citrus-warは、特定のプロファイルの実行を無効にすることであり、これが解決策でした:

<profile>
    <id>it</id>
    <build>
        <plugins>
            <plugin>
                <groupId>com.consol.citrus</groupId>
                <artifactId>citrus-remote-maven-plugin</artifactId>
                <version>${citrus.version}</version>
                <executions>
                    <!-- disable generating the war for this profile -->
                    <execution>
                        <id>generate-citrus-war</id>
                        <phase/>
                    </execution>

                    <!-- do something else -->
                    <execution>
                        ...
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.