gradle - 无法在多模块项目中使用 Sonar 运行器的集成覆盖

标签 gradle code-coverage jacoco sonar-runner sonarqube

我有一个多模块项目,想用 SonarQube 可视化集成代码覆盖率。我能够生成 test.exec 和 integTest.exec (JaCoCo),但在强制 sonar-runner (sonar-jacoco-plugin) 使用它们时遇到问题。 sonar-runner 报告:

Project coverage is set to 0% since there is no directories with classes.

根项目(生成 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 属性。

我的问题。有没有一种解决方法可以让我在带有 Sonar 运行器的多模块项目中使用包含集成覆盖率数据的文件?

最佳答案

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

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

尽管如此,它很容易出错,我希望其他人能有更好的主意。

关于gradle - 无法在多模块项目中使用 Sonar 运行器的集成覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21805397/

相关文章:

android - 艾玛报告覆盖率为 0%

java - libGdx 和 Gradle 的 Scala 实例化错误

java - Springframework构建失败

java - 构建项目时实现新依赖项时,在模块classes.jar中发现重复的类

maven - 使用Maven生成JaCoCo报告

java - 将 jacoco.exec 文件加载到 Sonar 中以进行多模块项目

java - 在 Intellij IDEA 中打开 JaCoCo 报告

ant - gradle什么时候以及如何解决其依赖关系?

PHPUnit 代码覆盖率

php - 记录哪些文件是执行的一部分? (包括,必需,类加载)