无法在多模块项目中使用与sonar-runner的集成覆盖

时间:2014-02-15 23:56:24

标签: gradle code-coverage jacoco sonar-runner sonarqube

我有一个多模块项目,想要用SonarQube可视化集成代码覆盖率。我能够生成test.exec和integTest.exec(JaCoCo),但是有问题迫使声纳 - 跑步者(sonar-jacoco-plugin)使用它们。声纳报告:

  

项目范围设置为0%,因为没有包含类的目录。

对于根项目(生成integTest.exec)没有源文件(但它不应该是集成覆盖的问题)。我的配置:

(...)
sonar.dynamicAnalysis=reuseReports
sonar.jacoco.reportPath=build/jacoco/test.exec
sonar.jacoco.itReportPath=build/jacoco/integTest.exec
sonar.modules=mod1,mod2
sonar.sources=src/main/java,src/main/resources
sonar.tests=src/test/java,src/test/groovy,src/test/resources
sonar.binaries=build/classes/main,build/resources/main

该项目是使用Gradle构建的,但由于CI的限制,我需要使用sonar-project.properties和sonar-runner配置(不是Gradle的sonar-runner插件,过去对我有用)。

更新。在分析了sonar-jacoco-plugin源之后,我试图创建一个定义为二进制目录的目录,但不幸的是,sonar-runner根本没有为根模块设置sonar.binaries属性。

我的问题。是否有一种解决方法可以让我在带有声纳 - 跑步者的多模块项目中使用带有集成覆盖率数据的文件?

1 个答案:

答案 0 :(得分:2)

作为一种丑陋的解决方法,我能够将报告路径配置为:

sonar.jacoco.reportPath=../build/jacoco/test.exec
sonar.jacoco.itReportPath=../build/jacoco/integTest.exec

和第二级模块(模块mod1,它有自己的子模块mod1amod1b):

mod1.sonar.jacoco.reportPath=../../build/jacoco/test.exec
mod1.sonar.jacoco.itReportPath=../../build/jacoco/integTest.exec

然而,它非常容易出错,我希望其他人能有更好的想法。