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

问题描述:

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

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

下对我的作品在孩子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> 

的插件。

+5

虽然这是“正确的”,即它的工作原理,应该指出的是,它是一个未指定的(或至少_undocumented_)功能。没有官方阶段称为“无”。所以,你可能会把'foo'放在那里。 –

+1

对于我在Maven 3中这不起作用。 true像bmargulies建议的作品 – mibutec

+1

我已经更新了包含Maven 3的答案。 –

看看插件是否有'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> 
+4

都尝试的选择,但他们没有工作。 – tobiasbayer

+0

如何命名您正在使用的插件并运行help:effective-pom以查看您是否确实拥有正确的执行权。 – bmargulies

+1

也看看插件与pluginManagement。后者覆盖前者。 – bmargulies

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

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

2点,我想强调:

  1. 相位设置为无,看起来比“没有”少哈克,虽然还是黑客攻击。
  2. ID必须与您要覆盖的执行相同。如果你没有指定id来执行,Maven会隐式地执行它(用你预想不到的方式)。

发布后,发现它已经在计算器: In a Maven multi-module project, how can I disable a plugin in one child?

+1

对于记录:默认执行ID遵循此答案中布局的简单规则:http://*.com/a/34599117/7641 –

+1

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