12

我试图在 maven 中使用 jacoco 插件为我正在处理的多模块项目生成代码覆盖率报告。

我在构建标签的父 pom.xml 中添加了以下内容。

      <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.8-SNAPSHOT</version>
            <configuration>
                <output>file</output>
                <append>true</append>
            </configuration>
            <executions>
                <execution>
                    <id>jacoco-initialize</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>jacoco-site</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <argLine>${argLine}</argLine>
            </configuration>
        </plugin>

在运行mvn verify时,为“project-root\module\target\site\jacoco\”中的每个模块生成了相应的 jacoco 报告

是否可以在包含每个模块的测试覆盖详细信息的项目根目录中生成一个合并的 jacoco 报告?

请建议合并各个模块报告的最佳方法。

4

2 回答 2

12

当然是!

我花了一些时间和一些资源来制作这种模式,但效果很好。

对于多模块 Maven 项目:

ROOT
|--LIB-1
|--LIB-2

这些 LIB项目都有自己的单元测试。

ROOT pom.xml

<!- properties-->
<jacoco.reportPath>${project.basedir}/../target/jacoco.exec</jacoco.reportPath>

<!-- build/plugins (not build/pluginManagement/plugins!) -->
<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.6.201602180812</version>
    <executions>
        <execution>
            <id>agent-for-ut</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
            <configuration>
                <append>true</append>
                <destFile>${jacoco.reportPath}</destFile>
            </configuration>
        </execution>
    </executions>
</plugin>

LIB项目pom.xml将继承 JaCoCo 插件的执行,因此只需在 Surefire 插件中连接 argline。

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <argLine>${argLine}</argLine>
    </configuration>
 </plugin>

我有一个扩展的答案,用于汇总集成测试以及通过 Sonar 报告的 JaCoCo 的单元测试,您可以在此处查看我的详细答案

于 2016-09-22T09:01:17.900 回答
1

除了markdsievers详细答案中建议的步骤外,我还必须在localhost:9000中设置sonarqube-5.3(支持jdk 7+)

设置 SonarQube

并使用mvn package 生成 jacoco.exec 文件。然后mvn sonar:sonar在声纳仪表板中生成报告。

于 2016-09-22T12:25:13.637 回答