我想在gradle任务中从命令行执行一些命令(例如,在dir中打印所有文件):
task dir(type: Exec) {
def adbCommand = ["dir", "*.*"]
commandLine adbCommand
standardOutput = new ByteArrayOutputStream()
doLast {
println ("result = " + standardOutput)
}
}
它的工作。好。但是,当我把它放在onLast
部分时,它不起作用:
task dir(type: Exec) {
doLast {
def adbCommand = ["dir", "*.*"]
commandLine adbCommand
standardOutput = new ByteArrayOutputStream()
println ("result = " + standardOutput)
}
}
我收到错误:
失败:构建因异常而失败。
任务执行失败':app:dir'。
execCommand == null!
答案 0 :(得分:0)
原因在于,Exec
的任务应该在构建的配置阶段进行配置,否则您的任务将不会配置并失败。
在您的第一个示例中,由于配置发生在配置阶段,一切正常。您的第二个示例尝试在doLast
闭包内配置任务 - 就在执行任务之后。
如果你真的需要在doLast
中执行某些事情,你可以使用这样的东西,而无需创建特殊任务:
task someTaskName {
doLast {
exec {
commandLine adbCommand
}
}
}
这是exec
- 用于执行某些命令的规范,它是在同一时间配置和执行的。