禁用在父POM中定义的Maven插件


158

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

约束:我不能更改父POM本身。

Answers:


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ör13年

1
对我来说,在Maven 3中这是行不通的。<skip> true </ skip>就像bmargulies建议的作品
mibutec 2015年

10
我必须添加<id>…</id>父POM 的一部分,然后它对我有用。
mirabilos 2015年

4
Maven 3解决方案并没有真正禁用该插件,不是吗?根据输出,该插件仍在执行。然后,它是否遵循跳过配置,以及选择跳过方式/选择方式如何,似乎取决于各个插件。
Zero3 '16

10
mirabilos的评论是适用于Maven 3的正确解决方案,并且可移植到所有插件中。并非所有插件都有一个<skip>参数。
吉利2013年

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

1
还要注意插件与pluginManagement。后者覆盖前者。
bmargulies

我正在使用Cobertura插件,但我不想在子pom中运行它。
tobiasbayer 2011年

检查目标的跳跃值为2.5。以前没有。cobertura的目标没有。
bmargulies

我不想只跳过检查,而是跳过整个插件执行。
tobiasbayer 2011年

37

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

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

我想强调2点:

  1. 阶段设置为“无”,虽然看起来还是“ hack”,但看起来比“ none”更没有hacker。
  2. id必须与您要覆盖的执行相同。如果您不指定执行ID,则Maven会隐式地执行该操作(这是您不直观地期望的)。

发布后发现它已经在stackoverflow中: 在Maven多模块项目中,如何禁用一个孩子的插件?


1
记录:默认执行ID遵循此答案中列出的简单规则:stackoverflow.com/a/34599117/7641
Jens Bannmann,2016年

2
值得注意的是,此解决方案实际上(针对OP要求)针对给定的执行ID 禁用了插件,而不是依赖于特定于插件的“跳过”选项。
Zero3 '16

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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.