禁用父POM中定义的Maven插件

时间:2011-10-19 12:15:50

标签: maven-2

我正在使用父POM来定义一个我不想在子POM中运行的插件。如何完全禁用子pom中的插件?

约束:我无法更改父POM本身。

4 个答案:

答案 0 :(得分:170)

在禁用子POM中的Findbugs时,以下内容适用于我:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <executions>
        <execution>
            <phase>none</phase>
        </execution>
    </executions>
</plugin>

注意:Findbugs插件的完整定义在我们的父/超级POM中,因此它将继承版本等等。

在Maven 3中,你需要使用:

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

用于插件。

答案 1 :(得分:52)

查看该插件是否具有“skip”配置参数。几乎所有人都这样做。如果是,只需将其添加到子代中的声明:

<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>

答案 2 :(得分:32)

线程陈旧,但也许有人仍然感兴趣。 我发现的最短形式是对λlex和bmargulies的例子的进一步改进。执行标记如下所示:

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

我要强调的2点:

  1. 阶段被设置为空,虽然仍然是黑客,但看起来不像'无'。
  2. id必须与您要覆盖的执行相同。如果你没有指定id来执行,Maven会隐式地执行它(以你不直观的方式)。
  3. 发布后发现它已经在stackoverflow中: In a Maven multi-module project, how can I disable a plugin in one child?

答案 3 :(得分: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>