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

升级Gradle 8.1.1后同步失败,@TaskAction注解及废弃属性问题求助

Gradle 8.1.1升级报错修复方案

一、解决IncrementalTaskInputs参数无效问题

Gradle 7.0起已废弃将IncrementalTaskInputs作为@TaskAction方法参数的用法,需改用InputChanges并配合@Incremental注解:

  1. 找到自定义增量任务类,添加@Incremental注解
  2. 将方法参数从IncrementalTaskInputs替换为InputChanges
  3. 调整逻辑适配新参数API:
import org.gradle.api.tasks.InputChanges;
import org.gradle.api.tasks.incremental.Incremental;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.DefaultTask;

@Incremental
public class YourCustomIncrementalTask extends DefaultTask {

    @TaskAction
    void taskAction(InputChanges inputs) {
        if (inputs.isIncremental()) {
            // 仅处理变更文件
            inputs.getFileChanges().forEach(change -> {
                // 你的文件处理逻辑
            });
        } else {
            // 全量构建逻辑
        }
    }
}

二、替换废弃属性

1. 替换AbstractCompile.destinationDir

改用destinationDirectory(类型为DirectoryProperty),支持Gradle的懒加载和增量构建特性:

  • Groovy DSL示例:
// 旧写法
compileJava.destinationDir = file("$buildDir/classes/java/main")

// 新写法
compileJava.destinationDirectory.set(file("$buildDir/classes/java/main"))
  • 自定义任务继承AbstractCompile时,同样将destinationDir替换为destinationDirectory。

2. 替换org.gradle.util.WrapUtil

使用Java标准库工具类替代:

  • WrapUtil.toList(iterable) → new ArrayList<>(iterable) 或 Collections.list(iterable)
  • WrapUtil.toSet(iterable) → new HashSet<>(iterable)
  • 复杂场景可结合Stream API处理:
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

// 示例:将Iterable转为List
List<String> list = StreamSupport.stream(yourIterable.spliterator(), false)
                                 .collect(Collectors.toList());

三、定位废弃属性引用位置

  • IDE全局搜索:用IDE的全局搜索功能,分别搜索destinationDir和WrapUtil,找到所有代码中的引用
  • 检查自定义插件/任务:重点排查自己编写的Gradle插件、自定义任务类
  • 第三方插件排查:若报错来自第三方插件,需升级插件至兼容Gradle 8.x的版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:20:20