如何使用Jacoco检查多模块Maven项目的最小代码覆盖率?

Evg*_*tov 7 testing code-coverage maven jacoco-maven-plugin

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

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

例如,module1具有70%的代码覆盖率,module2具有100%的代码覆盖率,两个模块中所有行的平均代码覆盖率为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>
Run Code Online (Sandbox Code Playgroud)

A_D*_*teo 5

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

来自jacoco github 官方页面

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

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

  • 您好,请问2019年这个答案有更新吗?我可以使用“report-aggregate”生成一个带有聚合的漂亮 html 报告。如果可能的话,那么 jacoco 应该能够生成一个聚合“jacoco.exec”,然后我应该能够检查聚合覆盖率,不是吗? (2认同)