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

Gradle中替换doFirst/doLast里废弃的Project#exec方法

解决Gradle Project.exec废弃警告的替换方案

方式一:使用ExecOperations注入

在Gradle任务中,通过依赖注入获取ExecOperations实例,替代原有的Project.exec方法。修改后的任务代码如下:

tasks.register("myTask") {
    // 注入ExecOperations服务
    val execOperations = project.services.get(ExecOperations::class.java)
    doLast {
        execOperations.exec { commandLine("sh", "-c", "myscript.sh") }
        execOperations.exec { commandLine("sh", "-c", "myscript2.sh") }
    }
}

如果是在build.gradle.kts顶层或插件类中,Gradle 8.0+支持直接通过project.execOperations属性访问:

// 顶层代码示例
val execOperations = project.execOperations
execOperations.exec { commandLine("sh", "-c", "myscript.sh") }

方式二:使用ProviderFactory.exec(适合延迟执行场景)

若需将命令执行作为延迟计算的Provider(比如用于任务输入输出),可使用ProviderFactory的exec方法:

tasks.register("myTask") {
    val providerFactory = project.providers
    doLast {
        // 执行命令并获取结果
        val result = providerFactory.exec {
            commandLine("sh", "-c", "myscript.sh")
        }.get()
        // 可检查执行结果状态
        if (result.exitValue == 0) {
            println("脚本执行成功")
        }

        providerFactory.exec { commandLine("sh", "-c", "myscript2.sh") }.get()
    }
}

关键说明

  • ExecOperations.exec和原Project.exec行为一致,同步执行命令并等待完成
  • ProviderFactory.exec返回Provider<ExecResult>,调用get()才会触发执行,适合延迟或缓存执行结果的场景
  • 两种方式均可消除废弃警告,适配Gradle 9.0及后续版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:49:49