在gradle中,有什么理由不使用Groovy的.execute()函数来运行命令行进程吗?我知道"gradle"方式是从 Exec 命令行。但感觉 .execute() 提供了更大的灵活性,例如能够在 doLast 块中使用。
Gradle的exec
与Groovy的.execute()
有很大不同。 Gradle 的exec
会将输出通过管道传输到 stdout,并等待命令完成,然后再执行下一个任务。 Groovy的.execute()
只返回一个进程。 该过程将在后台并行运行。除非您查找输出,否则您将看不到输出,等等。
为了使 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 Use Gradle's exec()
"Gradle"方法是定义具有单一职责的任务,因此任务依赖关系和结果是清晰可理解和可维护的。 如果你想要更大的灵活性,只需编写一个纯粹的Groovy脚本。