【问题标题】:How to add more Jacoco exclusions in a child project?如何在子项目中添加更多 Jacoco 排除项?
【发布时间】:2016-10-31 07:50:08
【问题描述】:

在父 POM 中,我们设置了 Jacoco 规则来强制执行测试覆盖率。这包括对通常没有行为的类的一些排除:

<execution>
    <id>default-check</id>
    <goals>
        <goal>check</goal>
    </goals>
    <configuration>
        <excludes>
            <!-- exclude largely auto-generated domain and model classes -->
            <exclude>**/model/*.class</exclude>
            <exclude>**/model/**/*.class</exclude>
            <exclude>**/domain/*.class</exclude>
            <exclude>**/domain/**/*.class</exclude>
            <exclude>**/dto/*.class</exclude>
            <exclude>**/dto/**/*.class</exclude>
        </excludes>
        <rules>
            <rule>
                <element>BUNDLE</element>
                <limits>
                    <limit implementation="org.jacoco.report.check.Limit">
                        <counter>INSTRUCTION</counter>
                        <value>COVEREDRATIO</value>
                        <minimum>0.70</minimum>
                    </limit>
                </limits>
            </rule>
        </rules>
    </configuration>
</execution>

在使用此父级的子 POM 中,添加额外排除类模式的 Maven 魔法是什么?

我正在尝试以各种方式使用combine... 属性,但无法正确输出有效的 POM。

有什么想法吗?

【问题讨论】:

    标签: maven jacoco jacoco-maven-plugin


    【解决方案1】:

    您不能扩展列表,但可以覆盖它。大多数时候,您需要每个模块的特定排除列表(您在不同模块中拥有完全相同的类型的频率如何?)

    为此,请勿在父 POM 中添加任何排除项。只需将标准/共享执行及其配置放在那里。在子 POM 中:

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
    
                    <configuration>
                        <excludes>
                            <exclude>ch/swissquant/toolbox/exceptions/**/*.class</exclude>
                            <exclude>ch.swissquant.toolbox.exceptions.*</exclude>
                        </excludes>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
    

    Maven 将读取此配置并将其与在父 POM 中找到的任何执行合并(因此它将应用于复杂 Jacoco 流程的所有步骤)。

    合并的工作方式如下:Maven 读取父 POM,然后用子 POM 中的任何特定值覆盖它(最后一个条目获胜)。对于属性也是如此,因此您可以使用属性为父项中的覆盖率等内容定义默认值,并在子项中重新定义属性。

    您可以通过运行mvn help:effective-pom 来验证这一点。

    【讨论】:

      【解决方案2】:

      不要使用单独的&lt;exclude&gt;标签,而是使用逗号分隔的列表

      家长会

      <excludes>**/dto/**/*.class,${jacoco.exclusions}
      </excludes>
      

      儿童绒球

      <properties>
          <jacoco.exclusions>**/model/*.class,**/model/**/*.class</jacoco.exclusions>
      </properties>
      

      【讨论】:

        猜你喜欢
        • 2016-08-19
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 2014-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多