You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDK11+AGP7.0.+Gradle7.0+环境下JacocoTaskExtension不存在问题求助

问题根因
  • Gradle 7.0 版本正式移除了自Gradle 6.6就标记废弃的org.gradle.testing.jacoco.plugins.JacocoTaskExtension类,同时原先用于获取Java项目配置的JavaPluginConvention也已废弃,替换为新的JavaPluginExtension
  • 该报错和JDK版本无关,属于Gradle版本迭代的API变更,AGP 7.x强制要求配套JDK11只是触发该问题的前置条件
修复方案

1. 调整导入语句

删除原代码中两个废弃API的导入:

import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.testing.jacoco.plugins.JacocoTaskExtension

替换为对应新API的导入:

import org.gradle.api.plugins.JavaPluginExtension
// 若后续需要配置Jacoco任务参数,可补充导入以下类
import org.gradle.testing.jacoco.tasks.JacocoReport
import org.gradle.testing.jacoco.tasks.JacocoCoverageVerification

2. 替换sourceSets获取逻辑

原代码中使用废弃JavaPluginConvention获取sourceSets的逻辑需要调整为新API:

// 旧写法
private val Project.sourceSets get() = convention.getPlugin(JavaPluginConvention::class).sourceSets

// 新写法
private val Project.sourceSets get() = extensions.getByType(JavaPluginExtension::class).sourceSets

3. Jacoco测试任务配置适配

如果后续业务逻辑中存在对Test任务配置Jacoco参数的代码,需要同步调整写法:

// 旧写法,依赖JacocoTaskExtension
tasks.withType<Test> {
    extensions.configure(JacocoTaskExtension::class) {
        isIncludeNoLocationClasses = true
        excludes = listOf("jdk.internal.*")
    }
}

// Gradle7+ 新写法,直接访问Test任务内置的jacoco扩展
tasks.withType<Test> {
    jacoco {
        isIncludeNoLocationClasses = true
        excludes.set(listOf("jdk.internal.*"))
    }
}

4. 其他兼容注意项

  • 你当前配置的Jacoco 0.8.7版本本身已经兼容Gradle7.x和AGP7.x,无需修改版本号;如果后续升级更高版本AGP,可同步升级Jacoco到0.8.8+避免类兼容问题
  • 自定义JacocoReport任务的executionData、sourceDirectories等配置项API无变更,不需要调整

内容的提问来源于stack exchange,提问作者jitendra kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:54:03