sonarqube忽略sonar.junit.reportPaths

时间:2017-11-13 13:46:43

标签: gradle sonarqube

我有一个gradle项目,它应用了sonarqube gradle插件,版本2.6 我在我的团队的sonarqube服务器版本6.4(版本25310)上运行它。

根据documentation,新版本的sonarqube接受属性sonar.junit.reportPaths而不是sonar.junit.reportsPath

我的构建运行了2个测试任务:testintegrationTest。每个测试任务将其xml分别输出到另一个目录:build/test-results/testbuild/test-results/integrationTest 我配置了sonarqube插件来获取这两个目录:

project.sonarqube {
     properties {
         property 'sonar.junit.reportsPath', ['build/test-results/test',
                                              'build/test-results/integrationTest']

         // configure additional integration test properties that seem to be required
         Collection<File> integrationTestSourceDirs = project.sourceSets.integrationTest.allJava.srcDirs.findAll { File dir -> dir.exists() }
         properties['sonar.tests'] += integrationTestSourceDirs
         Collection<File> integrationTestsClasses = project.sourceSets.integrationTest.output.classesDirs.files.findAll { File file -> file.exists() }
         properties['sonar.java.test.binaries'] += integrationTestsClasses
     }       
}

这不起作用。在sonarqube UI中,我只看到单元测试(来自test目录)并且没有看到任何集成测试。
我确保我的integrationTest目录包含有效的测试报告,确实如此。

似乎sonarqube仍然使用旧参数sonar.junit.reportsPath(默认情况下由gradle插件分配值build/test-results/test)。我可以告诉你,因为如果我删除这个参数,我在UI中根本看不到任何单元测试。这就是我删除旧参数的方法:

project.sonarqube {
   properties {
        properties.remove("sonar.junit.reportsPath")
   }
}    

作为一种解决方法,我将integrationTest任务配置为将其输出放在与单元测试相同的目录中:build/test-results/test。完成此操作后,所有测试(包括集成测试)都会被sonarqube选中,我可以在UI中看到它们。

但是,我更愿意将不同测试任务的输出保存在不同的目录中 描述的行为是故意的,还是一个错误?

1 个答案:

答案 0 :(得分:2)

您的SonarJava插件太旧了。新酒店仅在4.11开始提供。在4.10中,仅评估旧属性,因此忽略新属性。 Gradle插件只设置属性。评估发生在从SonarQube服务器下载的代码中,因此被忽略。