Gradle / Jacoco / SonarQube问题

时间:2016-05-10 19:31:35

标签: gradle sonarqube jacoco

一旦系统允许,我就会为此付出丰厚的回报。

我特别遇到的问题是获得覆盖并使集成测试正常运行。对于这些,我看到了无意义的错误:

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")
}

...导致: [仍在运行]

1 个答案:

答案 0 :(得分:0)

我不想要任何赏金或任何积分。 只是一个建议。 你能得到任何Jacoco报告吗?

我个人将2分开:即Jacoco报告生成和Sonar。 我会先尝试简单地生成Jacoco然后我会看看为什么Sonar无法控制它们。