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

标签 maven plugins reporting dependency-management

我有一个 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/

相关文章:

java - Maven 属性前缀 "user"和 "maven"有特殊含义吗?

java - 为 Eclipse Helios 安装 Google 插件

java - 在 pom.xml 中找不到 maven-antrun-plugin

java - 使用 JasperReports,如何使用子数据集中的单行和单列结果填充文本字段?

java - Ant 的代码未在 Maven 中运行

java - Maven 多模块项目和自定义 JRE

perl - Dancer 插件加载模板

c# - Telerik 报告中的嵌套表?

c# - 使用 .NET 的报告和数据可视化?

java - 如何从一个项目构建多个独立的 Gradle 项目?