【问题标题】:Sonarqube: Import Jacoco xml report for multimoduleSonarqube:为多模块导入 Jacoco xml 报告
【发布时间】:2020-11-07 01:27:58
【问题描述】:

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

重现步骤:

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

  1. 使用以下命令启动 sonarqube(当前版本 8.4.1)并稍等片刻。
docker run -d -p 9000:9000 sonarqube

编辑:插件“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'
...
  1. 浏览至http://localhost:9000/dashboard?id=example。您会看到 0 的覆盖率。

我做错了什么?

【问题讨论】:

    标签: sonarqube code-coverage jacoco jacoco-maven-plugin


    【解决方案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 logdocker 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" &gt; out-stackoverflow2.log。报告在第 640 行读取
      • 声纳日志显示,覆盖成功导入:pastebin.com/CgdQg7TH
      猜你喜欢
      • 1970-01-01
      • 2018-11-21
      • 2017-11-19
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2021-12-26
      • 2020-04-16
      相关资源
      最近更新 更多