本文根据 Qiita 原文,介绍如何将 Maven Java 项目中 JaCoCo 生成的覆盖率报告导入 SonarQube。
获取示例项目
| |
项目包含 src/main/java/com/example/MyClass.java、src/test/java/com/example/MyClassTest.java,以及配置 Maven 和 JaCoCo 的 pom.xml。
生成 JaCoCo 报告
JaCoCo Maven Plugin 的 prepare-agent 会在测试运行时收集覆盖率数据,report goal 则生成 XML 报告。原文中的配置示例如下:
| |
运行测试并生成报告:
| |
运行后,target/jacoco.exec 保存二进制覆盖率数据,target/site/jacoco/jacoco.xml 保存 XML 报告。
将报告发送到 SonarQube
指定 SonarQube URL、认证 Token 和项目键后启动分析:
| |
成功日志中出现 JaCoCo XML Report Importer 和 ANALYSIS SUCCESSFUL,表示报告已导入。
查看 SonarQube 中的结果
在项目仪表板中查看覆盖率。示例 MyClass 有 coveredMethod() 和 uncoveredMethod() 两个方法,而测试只调用前者,因此覆盖率为 50%。代码视图会用不同颜色标示已执行和未执行的代码行。


Java 可使用 JaCoCo 或 Cobertura;JavaScript/TypeScript 可使用 LCOV;.NET 可使用 Visual Studio Code Coverage 或 OpenCover;Python 可使用 Coverage.py;PHP 可使用 Clover XML;Go 可使用标准覆盖率格式。基本流程都是先生成报告,再将报告路径传给 SonarScanner。
总结
将 JaCoCo 与 SonarQube 集成后,可以在 CI/CD 中持续查看测试覆盖率。按行展示的覆盖信息有助于发现尚未覆盖的代码。