简体   繁体   English

jdk11、AGP 7.0.+ 和 ,Gradle 7.0.+ 不存在“JacocoTaskExtension”

[英]'JacocoTaskExtension' does not exist with jdk11 , AGP 7.0.+ and ,Gradle 7.0.+

jacoco works like charm with AGP 4.0.1, gradle 6.+ , jdk1.8 but throw error "JacocoTaskExtension" not found with upgraded gradle version which is below. 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

Steps to reproduce :重现步骤

I am not able to import JacocoTaskExtension in below kotlin class CodeCoveragePlugin It's working fine with jkd 1.8 but not with jdk11我无法在下面的 kotlin 类CodeCoveragePlugin 中导入JacocoTaskExtension 它在 jkd 1.8 上工作正常,但在 jdk11 上不工作

why am i using jdk11 ?为什么我使用 jdk11?

jdk11 is mandatory for agp 7.+ and gradle 7.+ agp 7.+ 和 gradle 7.+ 必须使用 jdk11

My final goal : make it functional with agp7.+我的最终目标:使用 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)
}

I have had a similar issue.我有一个类似的问题。 Could you please check the listed stack trace from the console?您能否从控制台检查列出的堆栈跟踪?

If it contains:如果它包含:

Unexpected SMAP line: *S KotlinDebug"意外的 SMAP 行:*S KotlinDebug"

Then it's clear that you haven't used the correct version 0.8.7 of Jacoco, as discussed here .那么很明显你没有使用正确的Jacoco 0.8.7 版本,正如这里所讨论的 In my case, I still need to add the following configuration:就我而言,我仍然需要添加以下配置:

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

You can put it inside your project.run closure.你可以把它放在你的project.run闭包中。 Hope it works.希望它有效。 If not, please share your stack trace as part of your question.如果没有,请在问题中分享您的堆栈跟踪。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM