在gradle中,有没有理由不使用Groovy的.execute()函数来运行命令行进程?我知道" gradle"方法是从Exec命令行。但感觉就像.execute()提供了更多的灵活性,例如能够在doLast块中使用。
答案 0 :(得分:1)
" Gradle"方法是定义具有单一责任的任务,因此任务依赖性和结果是清晰可理解和可维护的。如果您想要更多灵活性,只需编写一个纯Groovy脚本。
答案 1 :(得分:0)
Gradle的exec
与Groovy的.execute()
有很大不同。 Gradle的exec
将输出传递到标准输出,并等待命令完成,然后再执行下一个任务。 Groovy的.execute()
仅返回一个Process。该过程将在后台并行运行。除非您寻找输出,否则您将看不到输出。
要使Groovy的[].execute()
像Gradle的exec
一样工作,您必须定义一个这样的方法:
void execute(String... args) {
println "Executing $args...";
def proc = args.execute();
proc.in.eachLine {line -> println line}
proc.err.eachLine {line -> println 'ERROR: ' + line}
proc.waitFor()
}
然后在您的任务中执行以下操作:
task someTask() {
doLast {
execute("cmd", "/c", "echo Hello World!");
}
}
即使在这种情况下,如果任务失败,您的构建也不会失败!
tl; dr使用Gradle的exec()