禁用父POM中定义的Maven插件

tob*_*yer 144 maven-2

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

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

Ale*_*lex 187

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

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <executions>
        <execution>
            <phase>none</phase>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

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

在Maven 3中,您需要使用:

 <configuration>
      <skip>true</skip>
 </configuration>
Run Code Online (Sandbox Code Playgroud)

对于插件.

  • 我不得不添加父POM的`<id> ... </ id>`部分,然后它对我有用. (8认同)
  • mirabilos的评论是Maven 3的正确解决方案,可以在所有插件中移植.并非所有插件都有`<skip>`参数. (8认同)
  • 虽然这是"正确的",即它是有效的,但应该注意它是一个未指定(或至少_undocumented_)的功能.没有官方阶段称为"无".所以,你不妨把'foo'放在那里. (7认同)
  • 虽然Maven 3解决方案并没有真正禁用该插件,是吗?根据输出,插件仍然执行.然后它是否尊重跳过配置,以及它选择跳过的方式/内容,似乎取决于单个插件. (4认同)
  • 对于我在 Maven 3 中这不起作用。&lt;skip&gt;true&lt;/skip&gt; 喜欢 bmargulies 推荐的作品 (2认同)

bma*_*ies 56

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

<plugin>
   <groupId>group</groupId>
   <artifactId>artifact</artifactId>
   <configuration>
     <skip>true</skip>
   </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

如果没有,那么使用:

<plugin>    
<groupId>group</groupId>   
 <artifactId>artifact</artifactId>    
<executions>
     <execution>
       <id>TheNameOfTheRelevantExecution</id>
       <phase>none</phase>
     </execution>    
</executions>  
</plugin>
Run Code Online (Sandbox Code Playgroud)


小智 35

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

<execution>
    <id>TheNameOfTheRelevantExecution</id>
    <phase/>
</execution>
Run Code Online (Sandbox Code Playgroud)

我要强调2点:

  1. 阶段被设置为空,虽然仍然是黑客,但看起来不像'无'.
  2. id必须与要覆盖的执行相同.如果你没有指定id来执行,Maven将隐式地执行它(以一种你不直观的方式).

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

  • 作为记录:默认执行 ID 遵循此答案中列出的简单规则:http://stackoverflow.com/a/34599117/7641 (2认同)
  • 值得注意的是,这个解决方案实际上禁用了**(如OP要求的)插件(对于给定的执行ID),而不是依赖于特定于插件的"跳过"选项. (2认同)