关于Gradle,任务类型:Exec:Gradle,任务类型:Exec-命令行在onLast中不起作用

Gradle, task type: Exec - commandLine not work in onLast

我想在gradle任务中从命令行执行一些命令(例如,在dir中打印所有文件):

1
2
3
4
5
6
7
8
task dir(type: Exec) {
  def adbCommand = ["dir","*.*"]
  commandLine adbCommand
  standardOutput = new ByteArrayOutputStream()
  doLast {
    println ("result =" + standardOutput)
  }
}

是工作。 好。 但是,当我将它放在onLast部分时,它不起作用:

1
2
3
4
5
6
7
8
task dir(type: Exec) {
  doLast {
    def adbCommand = ["dir","*.*"]
    commandLine adbCommand
    standardOutput = new ByteArrayOutputStream()
    println ("result =" + standardOutput)
  }
}

我得到错误:

失败:构建失败,发生异常。

  • 什么地方出了错:

任务':app:dir'的执行失败。

execCommand == null!


原因是,实际上,应该在构建的配置阶段配置Exec的任务,否则您的任务将不会被配置并失败。

在您的第一个示例中,由于配置的所有工作都发生在配置阶段。 您的第二个示例尝试在doLast闭包内配置任务-在任务执行后立即执行。

如果您确实需要在doLast中执行某些操作,则可以使用类似这样的内容,而无需创建特殊任务:

1
2
3
4
5
6
7
task someTaskName {
    doLast {
        exec {
            commandLine adbCommand
        }
    }
}

这是Exec规范,用于执行某些命令,并且它是同时配置和执行的。