我正在使用父POM来定义一个我不想在子POM中运行的插件。如何完全禁用子pom中的插件?
约束:我无法更改父POM本身。
答案 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点:
发布后发现它已经在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>