【问题标题】:Gradle Jacoco - Could not find method jacocoTestReport()Gradle Jacoco - 找不到方法 jacocoTestReport()
【发布时间】:2017-10-07 20:31:28
【问题描述】:

我正在尝试在 Gradle 中生成 Jacoco 测试报告。当我尝试同步我的代码时,我会收到以下错误:

错误:(56, 0) 无法在 org.gradle.api.Project 类型的项目 ':app' 上找到参数 [build_38ehqsoyd54r3n1gzrop303so$_run_closure4@10012308] 的方法 jacocoTestReport()。

我的 build.gradle 文件包含以下项目:

apply plugin: 'jacoco'

jacoco {
    toolVersion = "0.7.6.201602180812"
    reportsDir = file("$buildDir/reports/jacoco")
}

jacocoTestReport {
    group = "Reporting"
    reports {
        xml.enabled true
        csv.enabled false
        html.destination "${buildDir}/reports/coverage"
    }
}

当我查看documentation 时,我没有发现我做错了什么。

Gradle 版本:3.3

为什么我会收到此错误,我该如何解决?

【问题讨论】:

    标签: java android gradle jacoco


    【解决方案1】:

    documentation mentioned in your question中所述:

    如果 Java 插件也应用于您的项目,则会创建一个名为 jacocoTestReport 的新任务,该任务依赖于测试任务。

    什么是非常合乎逻辑的 - Java 代码的覆盖率测量需要编译、执行测试等。

    因此,确实使用您的 build.gradle 示例会导致失败,在添加 apply plugin: 'java' 后会消失。

    【讨论】:

    • 嘿,我已经试过了。但我在 Android 上使用它,所以我不能使用 apply plugin: 'java'。对不起,我忘了提,我更新了标签。
    • @Guido 我不是为 Android 开发的,但是没有 java 插件看起来很奇怪。无论如何,我认为您应该向 Gradle 开发人员(因为 JaCoCo 插件是 Gradle 发行版的一部分)或 Android 插件开发人员报告这种不兼容性。
    • 这已经是众所周知的事情了。当您尝试在 Android 应用程序中使用 apply plugin: 'java' 时,您还会收到以下错误:Error:The 'java' plugin has been applied, but it is not compatible with the Android plugins.
    【解决方案2】:

    基本上我知道实现这一目标的两种方法。

    第一种方法是内置android gradle插件功能:

    android { 
        ... 
        buildTypes { 
           debug { 
              testCoverageEnabled = true 
           } 
           ... 
        } 
        ... 
    }
    

    这个将定义可以执行的gradle任务。据我所知,这适用于仪器测试。更多信息:Code Coverage on Android

    第二种方法是使用这个插件:

    https://github.com/vanniktech/gradle-android-junit-jacoco-plugin

    设置很简单:

    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
             classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.6.0'
        }
    }
    
    apply plugin: 'com.vanniktech.android.junit.jacoco'
    

    项目同步后,你会有jacocoTestReport<Flavor><BuildType>这样的任务

    我们使用它来衡量在本地机器上运行的单元测试的代码覆盖率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 2015-04-16
      • 2018-01-30
      • 1970-01-01
      • 2015-02-22
      相关资源
      最近更新 更多