0

jacoco 与 AGP 4.0.1、gradle 6.+、jdk1.8 的工作方式类似,但在下面的升级 gradle 版本中找不到错误“JacocoTaskExtension”。

   Gradle 7.0.2
------------------------------------------------------------

Build time:   2021-05-14 12:02:31 UTC
Revision:     1ef1b260d39daacbf9357f9d8594a8a743e2152e

Kotlin:       1.4.31
Groovy:       3.0.7
Ant:          Apache Ant(TM) version 1.10.9 compiled on September 27 2020
JVM:          11.0.12 (Oracle Corporation 11.0.12+8-LTS-237)
OS:           Mac OS X 11.5 x86_64

重现步骤

我无法在下面的 kotlin 类CodeCoveragePlugin中导入JacocoTaskExtension 它在 jkd 1.8 上运行良好,但在 jdk11 下运行良好

为什么我使用 jdk11 ?

jdk11 对于 agp 7.+ 和 gradle 7.+ 是必需的

我的最终目标:使用 agp7.+

package com.jitendra.sdk.android.gradle.quality.coverage

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.testing.Test
import org.gradle.kotlin.dsl.*
import org.gradle.testing.jacoco.plugins.JacocoPluginExtension
import org.gradle.testing.jacoco.plugins.JacocoTaskExtension

@Suppress("UnstableApiUsage")
class CodeCoveragePlugin : Plugin<Project> {

    override fun apply(project: Project) = project.run {
        val extension = extensions.create("codeCoverage", CodeCoverageExtension::class)

        apply(plugin = "jacoco")

        jacoco {
            toolVersion = 0.8.7
        }
        java { createJavaTasks(sourceSets["main"], extension) }

        setupAndroidTasks(extension)
    }

    private fun Project.java(run: JavaPlugin.() -> Unit) = plugins.withType(JavaPlugin::class, run)

    private val Project.sourceSets get() = convention.getPlugin(JavaPluginConvention::class).sourceSets

    private fun Project.jacoco(run: JacocoPluginExtension.() -> Unit) = configure(run)
}
4

1 回答 1

0

我有一个类似的问题。您能否从控制台检查列出的堆栈跟踪?

如果它包含:

意外的 SMAP 行:*S KotlinDebug"

那么很明显,您没有使用正确的Jacoco 0.8.7 版本,如此处所述。就我而言,我仍然需要添加以下配置:

configurations.all {
        resolutionStrategy.eachDependency {
            if (requested.group == "org.jacoco") {
                useVersion("0.8.7")
            }
        }
    }

你可以把它放在你的project.run封闭内。希望它有效。如果没有,请在您的问题中分享您的堆栈跟踪。

于 2021-11-10T15:02:07.353 回答