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
相关产品推荐
相关产品推荐

