Jacoco与SonarQube联动代码覆盖的相关问题咨询
Jacoco与SonarQube代码覆盖集成问题解答
项目配置背景
我们有一个可本地运行、部署后云端运行的Java项目,采用Jacoco与SonarQube实现代码覆盖,具体配置如下:
- 本地通过Jacoco验证测试覆盖并生成报告,Jacoco配置在POM文件中,通过两种方式排除部分文件的覆盖计算:
- 利用POM文件里的
configuration&excludes元素排除指定包与类; - 使用Retention Policy为RUNTIME的自定义
@Generated注解标记排除类。
- 利用POM文件里的
- Jenkins流水线中配置Sonar计算代码覆盖,Jenkins文件中设置了以下属性:
"sonar.java.coveragePlan": "jacoco" "sonar.coverage.jacoco.xmlReportPaths": "***/target/site/jacoco/jacoco.xml"
问题与解答
问题1:已在POM文件中指定需排除Jacoco代码覆盖的Java类,Sonar是自行运行代码覆盖,还是使用Jacoco生成的报告?
Sonar会直接使用Jacoco生成的XML报告来统计代码覆盖,不会自行重新运行代码覆盖逻辑。因为你配置的sonar.coverage.jacoco.xmlReportPaths指定了Jacoco报告的路径,同时sonar.java.coveragePlan设为jacoco,这两个配置明确告知Sonar要复用Jacoco的覆盖结果。
问题2:Sonar是否能识别Jacoco已排除的包与类,还是需单独指定排除文件?
Sonar会自动识别Jacoco报告中已排除的包和类,不需要在Sonar中单独配置排除规则。原因如下:
- 通过POM中Jacoco的
excludes元素排除的类,Jacoco生成的报告里不会包含这些类的覆盖数据; - 用自定义
@Generated注解标记的类,Jacoco在生成报告时会跳过统计,Sonar读取这份报告后自然不会将这些类纳入覆盖计算。
内容的提问来源于stack exchange,提问作者Srikanth
相关产品推荐
相关产品推荐

