Gradle 运行命令行进程:execute() vs commandLine

JWC*_*JWC 1 gradle

在 gradle 中,是否有任何理由不使用 Groovy 的 .execute() 函数来运行命令行进程?我知道“gradle”方式是从 Exec 到 commandLine。但感觉 .execute() 提供了更多的灵活性,例如能够在 doLast 块中使用。

Rya*_*ton 6

Gradle 的exec与 Groovy 的有很大不同.execute()。Gradleexec会将输出通过管道传输到 stdout 并等待命令完成,然后再执行下一个任务。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()
}
Run Code Online (Sandbox Code Playgroud)

然后在你的任务中做这样的事情:

task someTask() {
  doLast {
    execute("cmd", "/c", "echo Hello World!");
  }
}
Run Code Online (Sandbox Code Playgroud)

即使在这种情况下,如果任务失败,您的构建也不会失败!

tl;dr 使用 Gradle 的 exec()