我读 https://docs.sonarqube.org/display/PLUG/Code+Coverage+by+Unit+Tests+for+Java+Project 并使用cobertura作为我的代码覆盖插件然后我看到小项目的代码覆盖显示。当我在声纳中检查一个大项目时,我只看到代码覆盖率 - 这意味着它是空的。在日志中,我发现在/.../coverage.xml路径中找不到Cobertura报告。
由于OutOfMemeryError:heapspace,未生成coverage.xml。由于我的项目是如此大的项目,当我将堆内存设置为2GB并且cobertura插件内存为1.5GB声纳时,会显示代码覆盖率。
您的Sonar插件无法找到Jacoco生成的报告文件。
在你的pom(父母或孩子)寻找 <destFile> 标签下 jacoco/prepare-agent 执行。将名称和位置更改为 target/jacoco.exec 你很高兴去!
<destFile>
jacoco/prepare-agent
target/jacoco.exec
仅仅因为Sonar正确地调用了Surefire(并且您收到了“单元测试成功”消息)并不意味着JaCoCo检测了您的代码。
尝试直接执行JaCoCo。您可能会发现JaCoCo直接失败的原因:
mvn jacoco:prepare-agent test jacoco:report
JaCoCo将放置 jacoco.exec 以及其中的XML / HTML报告 目标/ jacoco 。或者它会失败,希望你能更好地了解原因。
一个非常常见的问题是,如果您根本改变了Surefire argLine,JaCoCo javaagent将无法运行,因为 jacoco:prepare-agent 只是设置 argLine 在这种情况下,方便忽略的属性。您可以设置准备代理 propertyName 财产到别的东西(比如 jacocoArgLine )并包括 那 在你的argLine配置中:
jacoco:prepare-agent
propertyName
<argLine>-Xmx1024m ${jacocoArgLine}</argLine>
而不是使用Jenkins声纳插件来运行声纳,尝试通过执行声纳目标与maven一起使用。通常这比设置额外的构建步骤和调整所有路径更容易,直到声纳找到所有相关文件。
在你的情况下,我猜它可以读取junit / testng报告,但找不到jacoco结果(jacoco.exec)。路径声纳输出( ../sonar/target/jacoco.exec )对吗?
../sonar/target/jacoco.exec
根据这个 博客文章 ,你可能忘了设置 sonar.binaries 项目属性中的属性
sonar.binaries
不要忘记sonar.binaries,否则,你可能得到类似的东西?由于没有包含类的目录,项目范围设置为0%。 ?在你的日志中。
[...] sonar.surefire.reportsPath=target/surefire-reports sonar.jacoco.reportPath=target/jacoco.exec sonar.binaries=target/classes [...]