一旦系统允许,我就会为此付出丰厚的回报。
我特别遇到的问题是获得覆盖并使集成测试正常运行。对于这些,我看到了无意义的错误:
Resource not found: com.something.somethingelse.SomeITCase
没有信息,因为没有任何内容可以与之相关,对于没有上下文的人来说也没什么意义。
这是我见过的其他奇怪之处。如果没有子项目的集成测试,我会看到:
JaCoCoItSensor: JaCoCo IT report not found: /dev/build/dilithium/target/jacoco-it.exec
为什么我会看到target
?这不是一个Maven项目。全局搜索显示代码库中的任何位置都没有提到target
目录。
然后,the documentation的这一部分:
sonarqube {
properties {
properties["sonar.sources"] += sourceSets.custom.allSource.srcDirs
properties["sonar.tests"] += sourceSets.integTest.allSource.srcDirs
}
}
我可以告诉sourceSets.integTest.allSource.srcDirs
返回文件,而不是字符串。它也应该是:
sonarqube {
properties {
property "sonar.tests", "comma,separated,file,paths"
}
请注意,如果您的目录中不存在,则会出现错误。当然,对于将集成测试放入哪个目录并且对于某些子项目而言,它们可能根本不存在,这显然没有标准。 Gradle标准是简单地忽略不存在的目录。您的代码最终看起来像:
sonarqube {
StringBuilder builder = new StringBuilder()
sourceSets.integrationTest.allSource.srcDirs.each { File dir ->
if ( dir.exists() ) {
builder.append(dir.getAbsolutePath())
builder.append(",")
}
}
if (builder.size() > 1) builder.deleteCharAt(builder.size() -1 )
if (builder.size() > 1 )
properties["sonar.tests"] += builder.toString()
properties["sonar.jacoco.reportPath"] +=
"$project.buildDir/jacoco/test.exec,$project.buildDir/jacoco/integrationTest.exec"
}
Sonar根本没有报道任何报道。如果我搜索* .exec文件,我会看到我的期望。那就是:
./build/jacoco/test.exec
./build/jacoco/integrationTest.exec
...但奇怪的是,我也看到了这一点:
./build/sonar/com.proj_name_component_management-component_proj-recordstate/jacoco-overall.exec
那是什么?为什么它在这样一个非标准的位置?
好的,我已添加此代码:
properties {
println "Before: " + properties.get("sonar.tests")
println "Before: " + properties.get("sonar.jacoco.reportPath")
property "sonar.tests", builder.toString()
property "sonar.jacoco.reportPath", "$project.buildDir/jacoco/test.exec,$project.buildDir/jacoco/integrationTest.exec"
println "After: " + properties.get("sonar.tests")
println "After: " + properties.get("sonar.jacoco.reportPath")
}
...导致: [仍在运行]
答案 0 :(得分:0)
我不想要任何赏金或任何积分。 只是一个建议。 你能得到任何Jacoco报告吗?
我个人将2分开:即Jacoco报告生成和Sonar。 我会先尝试简单地生成Jacoco然后我会看看为什么Sonar无法控制它们。