Gradle中JaCoCo扩展被弃用了,有什么替代品?

13

我正在同时使用RobolectricJaCoCo。如果没有以下这些gradle脚本里的代码,我的代码覆盖率报告将无法工作:

 testOptions {
    unitTests.all {
        jacoco {
            includeNoLocationClasses = true
        }
    }
 }

但在最近的Gradle版本中,我在这里使用的JaCoCo扩展程序被标记为已弃用。 我找不到任何替代品。 那么,我应该在哪里应用includeNoLocationClasses = true选项?

2个回答

11

使用Gradle Kotlin DSL与Gradle 5.5.1和Kotlin 1.3.31一起使用,可以正常工作:

tasks {
    withType<Test> {
        configure<JacocoTaskExtension> {
            isIncludeNoLocationClasses = true
        }
    }
}

我需要 excludes = listOf("jdk.internal.*") 以及 isIncludeNoLocationClasses = true。如果没有 excludes,我会得到一个带有 GeneratedSerializationConstructorAccessor1NoClassDefFoundError - Edmund Johnson

2
我找到了一个解决方案。JaCoCo会自动将jacoco扩展添加到所有test类型的任务中。所以,我只需要在构建脚本中添加以下代码即可:
tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
}

看起来不像是官方解决方案,但它允许自定义的JacocoReport实现正常工作。


1
对我不起作用(Gradle 5.1.1 / Android Gradle Plugin 3.3.1):无法为类型为org.gradle.testing.jacoco.plugins.JacocoPluginExtension的对象设置未知属性“includeNoLocationClasses”。 - Alix
我也遇到了这个错误:无法为类型为org.gradle.testing.jacoco.plugins.JacocoPluginExtension的对象设置未知属性'includeNoLocationClasses'。 - fobbymaster
我的答案已经过时了,请参考上面的最新解决方案。 - Lingviston

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接