Sonarqube:为多模块导入 Jacoco xml 报告
Posted
技术标签:
【中文标题】Sonarqube:为多模块导入 Jacoco xml 报告【英文标题】:Sonarqube: Import Jacoco xml report for multimodule 【发布时间】:2020-11-07 01:27:58 【问题描述】:我有一个多模块 Maven 项目,其中覆盖率报告位于覆盖的 Java 类之外的另一个模块中。将非空 xml 覆盖率报告(带有覆盖率信息)导入 Sonarqube 是成功的,但显示覆盖率为 0。
重现步骤:
-
在github project 之后结帐并使用
mvn clean verify
构建它。之后,存在位于coverage/target/site/jacoco-aggregate-all/jacoco.xml
的聚合 xml 报告。您可以在其中以及相应的 html-Report 中查看覆盖率数据。
-
使用以下命令启动 sonarqube(当前版本 8.4.1)并稍等片刻。
docker run -d -p 9000:9000 sonarqube
编辑:插件“JaCoco xml 报告导入器”已安装在此图像中。
-
使用以下(详细)命令发布覆盖率数据。报告导入成功(见日志)。
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'
...
-
浏览至
http://localhost:9000/dashboard?id=example
。您会看到 0 的覆盖率。
我做错了什么?
【问题讨论】:
【参考方案1】:事实证明,如果我对 xml 报告文件使用绝对路径,它就可以工作。所以我加了
<sonar.coverage.jacoco.xmlReportPaths>$project.basedir/../coverage/target/site/jacoco-aggregate-all/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
到顶部的maven pom,所以每个模块都指向同一个报告文件。对于模块目录的更深嵌套,您必须引入属性 main.basedir
或其他东西。
主要的理解是您不提供映射到模块类的声纳覆盖报告,但您提供映射到覆盖报告的模块类。
【讨论】:
【参考方案2】:请在 sonarqube 实例上安装 JaCoco xml report importer
插件(您可以在市场下找到它,只需在那里搜索 jacoco
)。此插件将获取您的代码覆盖率并将其导入 sonarqube。所以安装插件后,请使用相同的命令在 sonarqube 上查看结果
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
【讨论】:
感谢您的回答。在给定的 docker 映像中,此插件已安装。请参阅附加的主题截图。 @Rokko_11 您能否分享您在上面添加到描述中的第 3 步的完整日志? 我使用 dockerized maven 命令生成following log。docker run -it --rm --name example -v "%CD%":/usr/src/mymaven -w /usr/src/mymaven maven:3.6-jdk-8 mvn sonar:sonar -X -Dsonar.projectKey=example -Dsonar.host.url=http://kubernetes.docker.internal:9000 -Dsonar.login=admin -Dsonar.password=admin -Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco-aggregate-all/jacoco.xml | grep -i "jacoco\|sonar|squid" > out-***2.log
。报告在第 640 行读取
声纳日志显示,覆盖成功导入:pastebin.com/CgdQg7TH以上是关于Sonarqube:为多模块导入 Jacoco xml 报告的主要内容,如果未能解决你的问题,请参考以下文章
SonarQube + JaCoCo + TeamCity 模块名称错误
Sonarqube + Jacoco - 声纳不会从属性中读取报告路径
SonarQube Jacoco离线仪器在Maven Multi Module Project中显示0%的覆盖率
gradle、sonarqube 和 jacoco 插件的哪些版本兼容