Sonarqube:导入多模块的 Jacoco xml 报告

Rok*_*_11 7 code-coverage jacoco sonarqube jacoco-maven-plugin

我有一个多模块 Maven 项目,其中覆盖率报告位于另一个模块中,而不是覆盖的 Java 类中。将非空 xml 覆盖率报告(带有覆盖率信息)导入 Sonarqube 成功,但显示覆盖率为 0。

重现步骤:

  1. 查看以下github 项目并使用mvn clean verify. 之后,存在位于 中的聚合 xml 报告coverage/target/site/jacoco-aggregate-all/jacoco.xml。您可以在其中以及相应的 html 报告中看到覆盖率数据。

报道报告

  1. 使用以下命令启动 sonarqube(当前版本 8.4.1)并稍等一下。
docker run -d -p 9000:9000 sonarqube
Run Code Online (Sandbox Code Playgroud)

编辑:插件“JaCoco xml 报告导入器”已安装在此映像中。

JaCoco xml 报告导入器已安装

  1. 使用以下(详细)命令发布覆盖率数据。报告导入成功(参见日志)。
mvn sonar:sonar -X -Dsonar.projectKey=example -Dsonar.host.url=http://localhost:9000 -Dsonar.login=admin -Dsonar.password=admin -Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco-aggregate-all/jacoco.xml

## Log output contains
...
 10:54:28.519 Reading report '<project-path>\maven-multimodule-coverage\coverage\target\site\jacoco-aggregate-all\jacoco.xml'
...
Run Code Online (Sandbox Code Playgroud)
  1. 浏览至http://localhost:9000/dashboard?id=example. 您会看到覆盖率为 0。

我究竟做错了什么?

声纳报告

Rok*_*_11 5

事实证明,如果我对 xml 报告文件使用绝对路径,它就可以工作。所以我添加了

<sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/../coverage/target/site/jacoco-aggregate-all/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
Run Code Online (Sandbox Code Playgroud)

到顶部的maven pom,这样每个模块都指向同一个报告文件。对于更深层次的模块目录嵌套,您必须引入属性main.basedir或其他内容。

主要的理解是,您不提供声纳映射到模块类的覆盖报告,但您提供映射到覆盖报告的模块类。