【问题标题】:Android - Jacoco does not generate xml report properly(solved)Android - Jacoco 无法正确生成 xml 报告(已解决)
【发布时间】:2021-06-15 21:01:35
【问题描述】:

我们已将 JaCoCo 插件集成到我们的 Android 项目中,以通过 SonarQube 测量代码覆盖率。但是,它无法测量。因为 SonarQube 期望覆盖报告为 XML 格式。我们在 build.gradle(module) 中添加了一个自定义的 jacocoTestReport 任务。它生成一个 xml 文件,但不包含任何覆盖信息。你遇到过这样的问题吗?如果有,有什么解决办法吗?

build.gradle(root)

classpath "org.jacoco:org.jacoco.core:0.8.5"

build.gradle(模块)

apply plugin: 'jacoco'




...




task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) {
reports {
    xml.enabled = true
    html.enabled = true
}

def fileFilter = ['**/R.class',
                  '**/R$*.class',
                  '**/BuildConfig.*',
                  '**/Manifest*.*',
                  '**/*Test*.*',
                  'android/**/*.*']
def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter)
def mainSrc = "${project.projectDir}/src/main/java"

getSourceDirectories().setFrom(files([mainSrc]))
getClassDirectories().setFrom(files([debugTree]))
getExecutionData().setFrom(fileTree(dir: "$buildDir", includes: [
        "jacoco/testDebugUnitTest.exec",
        "outputs/code-coverage/connected/*coverage.ec"
]))

输出:

【问题讨论】:

    标签: android sonarqube build.gradle code-coverage jacoco


    【解决方案1】:

    你的 gradle 版本是什么? gradle 6.4+ 似乎有一些问题 https://github.com/gradle/gradle/issues/14132

    【讨论】:

    • 嗨@flavio-franco,我们的gradle版本是6.2.2
    • @tugcekolcu 我已经按照这些配置配置了 jacoco 和声纳 medium.com/wandera-engineering/… 我使用 gradle 6.3 没有问题。
    • 嗨@flavio-franco,我已经解决了这个问题。目录的路径不正确。我刚刚添加了解决方案。谢谢你的兴趣。 :)
    【解决方案2】:

    经过一番谷歌搜索,我终于解决了这个问题。源目录和类目录的路径不正确。正确的路径应该是这样的:

                def javaClasses = fileTree(dir: variant.javaCompileProvider.get().destinationDir,
                        excludes: fileFilter)
                def kotlinClasses = fileTree(dir: "${buildDir}/tmp/kotlin-classes/${variantName}",
                        excludes: fileFilter)
    
                classDirectories.setFrom(files([
                        javaClasses,
                        kotlinClasses
                ]))
    
                def variantSourceSets = variant.sourceSets.java.srcDirs.collect { it.path }.flatten()
                sourceDirectories.setFrom(project.files(variantSourceSets))
    

    问候,

    【讨论】:

      猜你喜欢
      • 2020-06-27
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-18
      相关资源
      最近更新 更多