gradle - 如何使用新的 Gradle SonarQube 插件向 Sonar 报告 Jacoco Groovy 代码覆盖率?

标签 gradle groovy sonarqube jacoco sonarqube-scan

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

我以前可以

  • 找到 build/jacoco/test.exec。 Jenkins 能够正确呈现它。
  • 浏览 jacocoHtml 的所有代码覆盖率详细信息
  • 在 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 代码覆盖率?

    最佳答案

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

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

    sonar.groovy.binaries is resolved only once for the root project. In a multi-module project where the property is not defined on the root module but only on leaf modules this cause missing coverage information.



    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 问题以了解何时可以删除此解决方法。

    关于gradle - 如何使用新的 Gradle SonarQube 插件向 Sonar 报告 Jacoco Groovy 代码覆盖率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38775704/

    相关文章:

    spring - 无法将名称[org.hibernate.dialect.MySQL5Dialect]解析为策略[org.hibernate.dialect.Dialect]

    Java jar 无法解析类

    git - 是否可以通过grgit插件仅提交一个文件进行gradle。

    java - 获取Gradle守护程序以在特定的Java版本上运行

    android - 我无法在android studio中添加此库:编译 'com.android.support:design:24.0.0'

    jenkins - 无法实例化 Jenkins 共享库中的对象

    Groovy:子字符串的索引?

    java - 使用JaCoCo和Gradle进行离线检测

    java - Gradle:如何在单独的进程/JVM 上运行 Sonar

    maven - Sonar 无法获取通过在 jenkins 中运行 maven 创建的三叶草测试结果