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

Sonarqube is not showing code coverage after running

我正在 运行使用 maven 的 sonarqube。

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

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

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

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

使用声纳扫描仪 运行 时的相同代码


这是我的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 结果,但在声纳中看不到。


如果发现错误,声纳是否可能拒绝进行代码覆盖?!

我找到了解决方案 -

我包含的 Maven 插件将 Jacoco 的目标文件和数据文件配置为 ${basedir}/target/coverage-reports/jacoco-unit.exec

但默认声纳读数为 ${basedir}/target/jacoco.exec。我在 http://localhost:9000/settings?category=java

更改了默认值

参考:Sonar Code Coverage


找不到工作参考 link。这是辅助 link:Baeldung Sonar and jacoco

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

1.To开始,我在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.In 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

我遇到了同样的问题,我会帮你解决的。这里的第一件事是遍历你的 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 的 属性 名称

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

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

在声纳项目属性文件中:

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