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

我正在使用一个父POM,它定义了一个我不想在一个子POM中运行的插件。 我怎样才能完全禁用孩子pom的插件?

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

以下工作适用于我禁用孩子POM中的Findbugs:

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

注意:Findbugs插件的完整定义在我们的父级/超级POM中,所以它将inheritance版本等等。

在Maven 3中,你需要使用:

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

为插件。

看看插件是否有'skip'configuration参数。 几乎所有人都这样做。 如果是这样,只需将其添加到孩子的声明中:

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

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

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

2分我想强调一下:

  1. 阶段是没有任何东西,这看起来不像“无”,但仍然是黑客。
  2. ID必须与您要覆盖的执行相同。 如果你没有指定id来执行,Maven将会隐式地执行它(以一种你不直观的方式)。

发布后发现它已经在stackoverflow: 在一个Maven的多模块项目,我怎样才能禁用一个孩子的插件?