在Maven多模块项目中,如何在一个孩子中禁用插件?

Cod*_*rer 42 plugins reporting dependency-management maven

我有一个maven多模块项目(男孩,我已经写了打开方式在这个网站太多次了).几乎所有模块(即其中包含代码的模块)都应运行maven-site-plugin来生成有关代码覆盖率等的报告.这些模块具有详细的共享配置 - 报告运行,要覆盖哪些文件/排除某些插件等

但是,有一些模块可以处理打包 - 运行程序集插件以生成tarball等.这些都不会从运行站点报告中获得任何好处 - 没有可以分析的代码,也没有可以报告的测试.

所以我有很多需要共享插件配置的模块,以及一些不需要运行插件的模块,最好是根本不需要.如果我把插件放在<build>父POM 的部分中,我可以做前者(共享配置),但在这种情况下,我似乎无法关闭插件.如果我将配置下推到每个模块自己的POM,我可以做后者(避免运行插件),但在这种情况下我无法想出一个分享配置信息的好方法.

我想要的是 - 共享配置,对于有时被子模块禁用的插件 - 甚至可能吗?如果是这样,怎么样?

Rya*_*art 72

通过"运行插件",我假设您的意思是插件已经绑定到生命周期阶段,并且您希望在某些模块中取消绑定它.首先,您可以考虑更改POM继承,以便不需要插件的模块具有一个父节点和具有不同父节点的模块.如果您不想这样做,那么您可以在子模块中将执行阶段显式设置为"nothing".例如,如果您有这样的父pom配置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
        <execution>
            <id>i-do-something</id>
            <phase>initialize</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                ... lots of configuration
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

然后在子模块中,您可以这样做:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
        <execution>
            <id>i-do-something</id>
            <phase/>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

因为它是相同的插件和相同的执行ID,所以它会覆盖父项中指定的配置,现在插件不会绑定到子项目中的某个阶段.

  • 如果在父模块中没有为插件指定"<phase>",则此方法不起作用. (5认同)
  • @evgeniysharapov在这种情况下你仍然可以在子模块中使用`<phase> none </ phase>`,参见[this answer](http://stackoverflow.com/a/14653088/1155724). (5认同)