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

时间:2016-08-04 19:21:45

标签: gradle groovy sonarqube jacoco sonarqube-scan

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

我能够

  1. 查找build / jacoco / test.exec。詹金斯能够正确地渲染它。
  2. 使用所有代码覆盖率详细信息浏览jacocoHtml
  3. 在SonarQube上查找单元测试结果和源代码
  4. 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代码覆盖率?

1 个答案:

答案 0 :(得分:3)

当我遇到同样的问题时,你可能已经看过我的评论了。

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

  

sonar.groovy.binaries仅针对根项目解析一次。在一个   多模块项目,其中未在根上定义属性   模块但仅在叶模块上导致丢失覆盖范围   信息。

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

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

“:myspecialsubmodule.sonar.groovy.binaries” - > “/家庭/用户/项目/根项目/ myspecialsubmodule /建造/类/主”

在为root设置之前,它将无效。

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

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

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