11

我想在使用目标jacoco maven plugin的构建过程中检查代码覆盖率的最低水平。'check'

对于单模块项目,一切正常。但是对于多模块,我想检查所有模块的平均代码覆盖率,但check目标会分别检查每个模块。

例如,module170%的代码覆盖率,module2100%的代码覆盖率,这两个模块的所有行的代码覆盖率平均为85%。我正在尝试将所有项目的代码覆盖率设置为 80%,但由于第一个模块而失败。

来自 pom:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.6.201602180812</version>
    <executions>
        <execution>
            <id>default-prepare-agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>default-report</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
        <execution>
            <id>default-check</id>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <rules>
                    <rule>
                        <element>BUNDLE</element>
                        <limits>
                            <limit>
                                <counter>COMPLEXITY</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>0.80</minimum>
                            </limit>
                        </limits>
                    </rule>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>
4

2 回答 2

5

简短的回答:(在撰写本文时)仅使用 Maven 和 Jacoco 是不可能的。

来自官方 jacoco github 页面

当前的 JaCoCo Maven 目标仅适用于单个模块:测试在模块内执行,并且仅对同一模块内的代码提供覆盖。分别为每个模块创建覆盖率报告。没有对跨模块覆盖或多个模块的组合报告的内置支持。

因此,仅使用 Maven 和 Jacoco 无法满足您的要求。但是,您可以在企业设置中使用一种通用方法:Sonarqube,它将处理生成的 jacoco 文件(即jacoco.exec)并通过其 Jacoco 集成(在其最新版本中提供开箱即用)聚合报告和治理。

于 2016-08-05T12:55:45.817 回答
0

来源:https ://www.jacoco.org/jacoco/trunk/doc/check-mojo.html

使用带有计数器指令的 Bundle,这将检查整个项目的整体代码覆盖率:

<rules>
<rule>
    <element>BUNDLE</element>
    <limits>
        <limit>
            <counter>INSTRUCTION</counter>
            <value>COVEREDRATIO</value>
            <minimum>0.80</minimum>
        </limit>
    </limits>
</rule>
于 2022-02-23T11:38:07.973 回答