【问题标题】:How to report Jacoco Groovy code coverage to Sonar using new Gradle SonarQube plugin?如何使用新的 Gradle SonarQube 插件向 Sonar 报告 Jacoco Groovy 代码覆盖率?
【发布时间】:2016-12-11 01:41:38
【问题描述】:

我有一个使用 Gradle 的多模块 Groovy 项目。我应用了 jacoco、sonarqube 插件。

我可以

  1. 找到 build/jacoco/test.exec。 Jenkins 能够正确渲染它。
  2. 浏览 jacocoHtml 的所有代码覆盖率详细信息
  3. 在 SonarQube 上查找单元测试结果和源代码

但是Code Coverage 没有被报告给 SonarQube。

这是我的 build.gradle

plugins {
    id "org.sonarqube" version "2.0.1"
}

allprojects {
    group = 'my'
    version = '1.0-SNAPSHOT'
}

subprojects {
    apply plugin: 'groovy'
    apply plugin: "jacoco"

    dependencies {
        compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.4.1'
        testCompile group: 'org.spockframework', name: 'spock-core', version: '1.0-groovy-2.4'
        testCompile group: 'org.assertj', name: 'assertj-core', version: '2.4.1'
    }
}

我在构建过程中观察到以下日志语句。

No binary directories defined for project core.
Project coverage is set to 0% since there is no directories with classes.

然后我尝试将以下内容添加到子项目或所有项目中,但仍然没有向 SonarQube 报告覆盖范围。

sonarqube {
    properties {
        property "sonar.groovy.jacoco.reportPath", "${project.buildDir}/jacoco/test.exec"
        property "sonar.jacoco.reportPath", "${project.buildDir}/jacoco/test.exec"
        property "sonar.binaries", "${project.buildDir}/classes"
        property "sonar.groovy.binaries", "${project.buildDir}/classes"
    }
}

如何启用向 SonarQube 报告 Jacoco Groovy 代码覆盖率?

【问题讨论】:

  • 我认为您的配置似乎还可以。尽管我们将它用于二进制文件:“$project.buildDir.name/classes”。也许您可以从日志中添加更长的 sn-p,它专门列出您的模块和查找覆盖文件的路径。更新:您想将 sonarqube 插件应用到根目录,否则它可能会认为它们实际上是单独的项目。
  • 现在我有一个类似的问题,其中一个项目有效,但不适用于另一个。您是否尝试过直接在根上应用配置?

标签: gradle groovy sonarqube jacoco sonarqube-scan


【解决方案1】:

当我与同样的问题作斗争时,您可能已经看到了我的 cmets。

我找到了 groovy 插件的站点,其中一个问题报告如下:

sonar.groovy.binaries 只为根项目解析一次。在一个 未在根上定义属性的多模块项目 模块,但仅在叶模块上,这会导致缺少覆盖 信息。

https://github.com/SonarQubeCommunity/sonar-groovy/issues/52

所以即使它是为你的模块设置的:

":myspecialsubmodule.sonar.groovy.binaries" -> "/home/user/Projects/root-project/myspecialsubmodule/build/classes/main"

在为根设置之前,它不会起作用。

在根目录上专门设置配置后(目前,直到问题得到解决)使它对我有用。

property "sonar.groovy.binaries", "${project.buildDir.name}${File.separator}classes"

我将跟踪 github 问题以了解何时可以删除此解决方法。

【讨论】:

  • 让我试试。非常感谢。将发布更新。
  • 成功了。谢谢。请编辑您对"${project.buildDir.name}${File.separator}classes"的回复中的相关部分
猜你喜欢
  • 2016-11-08
  • 2020-07-18
  • 2012-06-11
  • 2015-08-03
  • 1970-01-01
  • 2020-12-29
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多