Sonarqube 运行后未显示代码覆盖率
Posted
技术标签:
【中文标题】Sonarqube 运行后未显示代码覆盖率【英文标题】:Sonarqube is not showing code coverage after running 【发布时间】:2017-10-24 17:57:16 【问题描述】:我正在使用 maven 运行 sonarqube。
我已使用以下way 安装它。
使用brew
,我安装了mysql
和sonar
。
当我运行时,我得到 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 test
到 mvn -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
【讨论】:
以上是关于Sonarqube 运行后未显示代码覆盖率的主要内容,如果未能解决你的问题,请参考以下文章