Gradle自定义任务扩展Exec正在抛出错误
我的目的是通过在Gradle中创建自定义任务来运行Gradle自定义任务扩展Exec正在抛出错误,gradle,groovy,build.gradle,devops,gradlew,Gradle,Groovy,Build.gradle,Devops,Gradlew,我的目的是通过在Gradle中创建自定义任务来运行docker save命令: 下面是我的build.gradle文件: class SaveTask extends Exec { @TaskAction void saveImage() { commandLine "bash","-c","docker save someimage:latest | gzip > someimage.tar.gz"
docker save
命令:
下面是我的build.gradle
文件:
class SaveTask extends Exec {
@TaskAction
void saveImage() {
commandLine "bash","-c","docker save someimage:latest | gzip > someimage.tar.gz"
}
}
// Create a task using the task type
task save(type: SaveTask)
当我运行任务时,它会给我以下错误:
Execution failed for task ':save'.
> execCommand == null!
有人能告诉我哪里出了问题吗?您可能根本不需要创建自定义任务类型,只需为任务使用常规的
Exec
任务类型save
:
task save(type: Exec) {
commandLine "bash", "-c", "docker save someimage:latest | gzip > someimage.tar.gz"
}
方法失败的原因是Exec
任务类型在内部定义了@TaskAction
。此@TaskAction
运行由命令行定义的命令。在您的SaveTask
任务类型中,定义了另一个@TaskAction
,但它将在原始@TaskAction
之后运行。这就是为什么原始@TaskAction
的命令行仍然为null/空的原因
如果仍要创建自定义任务类型,例如,因为要定义将由多个任务使用的配置界面,请使用doFirst
闭包来定义命令行,因为它将在任何任务操作之前执行:
class SaveTask extends Exec {
String image
SaveTask() {
doFirst {
commandLine "bash", "-c", "docker save ${image} | gzip > someimage.tar.gz"
}
}
}
task saveImageA(type: SaveTask) {
image = 'imageA:latest'
}
task saveImageB(type: SaveTask) {
image = 'imageB:latest'
}
我修改了上面的代码如下,它的工作为我
class SaveTask extends Exec {
SaveTask() {
commandLine "bash", "-c", "someimage:latest | gzip > someimage.tar.gz"
}
}
task saveImageA(type: SaveTask)
不走运:(!!得到相同的错误execCommand==nully您使用了第一个还是第二个代码段?第二个。我想在此基础上实现worker api。这就是选择自定义Gradle任务的原因