Jacoco 在 Gradle 7.0.2 和 Kotlin 1.5.10 上失败

Ult*_*o_m 5 android gradle jacoco kotlin android-studio

今天我更新了 android studio 中的 gradle 和 kotlin 依赖项。

新版本如下:

kotlin_version = "1.5.10"
...
jacoco {
    toolVersion = "0.8.6"
}
...
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
Run Code Online (Sandbox Code Playgroud)

测试覆盖率报告任务失败并出现以下错误:

2021-05-27T16:57:49.150+0200 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':consumerkit:testDebugUnitTestCoverage'.
2021-05-27T16:57:49.304+0200 [DEBUG] [org.codehaus.groovy.vmplugin.VMPluginFactory] Trying to create VM plugin `org.codehaus.groovy.vmplugin.v9.Java9` by checking `java.lang.Module`, but failed:
java.lang.ClassNotFoundException: java.lang.Module
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at org.codehaus.groovy.vmplugin.VMPluginFactory.lambda$createPlugin$0(VMPluginFactory.java:61)
        at java.security.AccessController.doPrivileged(Native Method)
Run Code Online (Sandbox Code Playgroud)

God*_*din 8

对于科特林1.5你应该使用JaCoCo0.8.7代替0.8.6-见https://github.com/jacoco/jacoco/pull/1164和完整的更新在https://www.jacoco.org/jacoco/trunk/doc/changes.html

示例片段:

// build.gradle or build.gradle.kts
jacoco {
    toolVersion = "0.8.7"
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*Pag 5

我已经有了

jacoco {
    toolVersion = "0.8.7"
}
Run Code Online (Sandbox Code Playgroud)

配置完成,但无论如何都不起作用,解决问题的方法是遵循此处的评论

  1. 在你的模块中build.gradle切换回:
android {
    //....
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}
Run Code Online (Sandbox Code Playgroud)

不用担心,如果您尚未使用 Java 11 语言功能,它不会破坏任何内容,AGP 7 仍然与 JDK 8 作为目标兼容。

  1. 然后,您需要强制 AGP 使用 0.8.7 版本,而不是默认的 0.8.3 版本。在allprojectsbuild.gradle文件的块中,添加以下内容:
allprojects {
  //... other things

  // workaround to fix an auto-import of a lower Jacoco version
  resolutionStrategy {
    eachDependency { details ->
      if ('org.jacoco' == details.requested.group) {
        details.useVersion "0.8.7"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在它应该可以使用:

AGP 7.0.X
Kotlin 1.5.X
JDK 11 (embedded with AS)
Run Code Online (Sandbox Code Playgroud)