我有一个 Maven 多模块项目(天啊,我已经在这个网站上写了太多次这种打开方式了)。几乎所有模块(即其中包含代码的模块)都应该运行 maven-site-plugin 来生成有关代码覆盖率等的报告。这些模块有详细的共享配置 - 报告运行、覆盖/排除某些插件的哪些文件等。
但是,有一些模块处理打包 - 运行程序集插件来生成 tarball 等。这些模块从运行站点报告中没有任何好处 - 没有要分析的代码,没有要报告的测试。
所以我有很多模块需要共享插件配置,还有一些模块需要不运行插件,最好根本不运行。如果我将插件放在 <build>
中,我可以执行前者(共享配置)父 POM 的部分,但在这种情况下我似乎无法在需要时关闭插件。如果我将配置推送到每个模块自己的 POM,我可以执行后者(避免运行插件),但在这种情况下我找不到共享配置信息的好方法。
我想要的——共享配置,对于有时被子模块禁用的插件——甚至可能吗?如果是这样,怎么办?
最佳答案
通过“运行插件”,我假设您的意思是该插件绑定(bind)到生命周期阶段,并且您希望在某些模块中取消绑定(bind)它。首先,您可以考虑更改 POM 继承,以便不需要插件的模块有一个父级,而需要插件的模块有不同的父级。如果您不想这样做,那么您可以在子模块中显式地将执行阶段设置为“无”。例如。如果你有这样的父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>
然后在子模块中,您可以执行以下操作:
<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>
因为它是相同的插件和相同的执行 ID,所以它会覆盖父项目中指定的配置,并且现在该插件不会绑定(bind)到子项目中的阶段。
关于maven - 在 Maven 多模块项目中,如何禁用一个子项目中的插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7800647/