Sonarqube 运行后未显示代码覆盖率

Posted

技术标签:

【中文标题】Sonarqube 运行后未显示代码覆盖率【英文标题】:Sonarqube is not showing code coverage after running 【发布时间】:2017-10-24 17:57:16 【问题描述】:

我正在使用 maven 运行 sonarqube。

我已使用以下way 安装它。 使用brew,我安装了mysqlsonar

当我运行时,我得到 7 个严重错误,但 88 次测试的代码覆盖率为零

当我使用 IntelliJ 的工具运行它时,我得到以下结果。 (不是零!)

这是我直接检查 Jacoco 结果的时候。在$base_direc/target/jacoco/index.html

使用 sonar-scanner 运行时的代码相同


这是我的 Maven 配置

我的~/.m2/settings.xml


编辑 1: 我在日志中发现了这一点。


编辑2: 我编辑了~/.m2/settings.xml 添加了

<properties>
    <sonar.host.url>http://localhost:9000/</sonar.host.url>
</properties>

已编辑/usr/local/Cellar/sonarqube/6.3.1/libexec/conf/sonar.properties 已添加sonar.host.url=http://localhost:9000/

已编辑 /usr/local/etc/sonar-scanner.properties 添加 - sonar.host.url=http://localhost:9000/

以上述所有方式运行应用程序,结果相同,即我可以看到 Jacoco 结果,但在声纳中看不到。


有没有可能发现bug sonar 拒绝做代码覆盖?!

【问题讨论】:

您的分析日志中有任何相关内容吗?如果是这样,请edit您的问题也包括在内。 @G.Ann-SonarSourceTeam 我找到了一些东西并编辑了问题。请检查,是否有帮助 有什么与处理报道报告有关的吗? 【参考方案1】:

我找到了解决办法-

我包含的maven插件将Jacoco的destfile和datafile配置为$basedir/target/coverage-reports/jacoco-unit.exec

但默认情况下,声纳读取$basedir/target/jacoco.exec。我在 http://localhost:9000/settings?category=java 更改了默认值


参考:Sonar Code Coverage


找不到有效的参考链接。这是辅助链接:Baeldung Sonar and jacoco

【讨论】:

参考链接已失效 救命!感谢您发帖。 您是否重新运行 sonarqube 以使更改生效?? 我不记得了,那是 4.5 年前。请检查文档。我试着找了,没找到。【参考方案2】:

我已经通过以下步骤解决了这个问题:

1.首先,我在 pom.xml 中添加了配置。

<properties>
  <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
  <sonar.jacoco.reportPath>$project.basedir/../target/jacoco.exec</sonar.jacoco.reportPath>
  <sonar.language>java</sonar.language>
</properties>

2.在 sonarqube 属性文件中添加以下部分。

sonar.projectName=$JOB_NAME
sonar.projectVersion=1.0.0
sonar.sources=src/main
sonar.sourceEncoding=UTF-8
sonar.language=java
sonar.tests=src/test
sonar.junit.reportsPath=target/surefire-reports
sonar.surefire.reportsPath=target/surefire-reports
sonar.jacoco.reportPath=target/jacoco.exec
sonar.binaries=target/classes
sonar.java.coveragePlugin=jacoco
sonar.verbose=true

【讨论】:

我认为sonar.jacoco.reportPath 是我拼图中缺失的一块。我在工作中浪费了大约 2 天的时间试图找到这个。谢谢。【参考方案3】:

我遇到了同样的问题,我会帮你解决的。这里的第一件事是浏览你的 pom 文件。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <jacoco.version>0.8.5</jacoco.version>
    <sonar.jacoco.reportPath>target/jacoco-ut.exec</sonar.jacoco.reportPath>
    <sonar.jacoco.itReportPaths>target/jacoco-it.exec</sonar.jacoco.itReportPaths>
</properties>

在 pom 文件中,你使用了 jacoco-ut.exec 你必须在你的 在 Jenkins 中执行 SonarQube Scanner

sonar.java.binaries=target/classes
sonar.junit.reportsPath=target/surefire-reports
sonar.surefire.reportsPath=target/surefire-reports
sonar.jacoco.reportPath=target/jacoco-ut.exec

记住 pom 中的 jacoco.exec 和 Jenkins 中执行 SonarQube Scanner 的属性名称

【讨论】:

【参考方案4】:

对我来说,问题是: 报告是在预打包阶段生成的。现在我们更新了 Pull Request maven 阶段。mvn -B clean testmvn -B clean package

此外,最新的 SONAR 更喜欢 XML 报告。您可以通过以下方式在 maven pom 中指定路径: &lt;sonar.coverage.jacoco.xmlReportPaths&gt;target/site/jacoco/jacoco.xml&lt;/sonar.coverage.jacoco.xmlReportPaths&gt;

在声纳项目属性文件中:

sonar.projectKey=my-project
sonar.projectName=my-project

sonar.language=java
sonar.java.binaries=target/classes
sonar.sources=src/main
sonar.tests=src/test
sonar.exclusions=**/beans/*,**/config/*,**/constants/*,**/dtos/**,**/entity/*,**/exceptions/*,**/insights/*,**/App.java
sonar.sourceEncoding=UTF-8
sonar.dynamicAnalysis=reuseReports
sonar.junit.reportsPath=target/surefire-reports
sonar.java.coveragePlugin=jacoco
sonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml

【讨论】:

以上是关于Sonarqube 运行后未显示代码覆盖率的主要内容,如果未能解决你的问题,请参考以下文章

代码覆盖率显示零百分比 - SonarQube

Karma 代码覆盖率未在 Sonarqube 中显示

用于 Typescript 的 Sonarqube 上未显示代码覆盖率

SonarQube 8.2 分析显示 0 代码覆盖率

将功能代码测试覆盖率集成到sonarqube控台显示

将功能代码测试覆盖率集成到sonarqube控台显示