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

时间:2016-06-10 15:38:25

标签: gradle

在gradle中,有没有理由不使用Groovy的.execute()函数来运行命令行进程?我知道" gradle"方法是从Exec命令行。但感觉就像.execute()提供了更多的灵活性,例如能够在doLast块中使用。

2 个答案:

答案 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()