Gradle,任务类型:Exec - commandLine在onLast中不起作用

时间:2017-02-14 18:02:45

标签: gradle

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

task dir(type: Exec) {
  def adbCommand = ["dir", "*.*"]
  commandLine adbCommand
  standardOutput = new ByteArrayOutputStream()
  doLast {
    println ("result = " + standardOutput)
  }
}

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

task dir(type: Exec) {
  doLast {
    def adbCommand = ["dir", "*.*"]
    commandLine adbCommand
    standardOutput = new ByteArrayOutputStream()
    println ("result = " + standardOutput)
  }
}

我收到错误:

失败:构建因异常而失败。

  • 出了什么问题:

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

  

execCommand == null!

1 个答案:

答案 0 :(得分:0)

原因在于,Exec的任务应该在构建的配置阶段进行配置,否则您的任务将不会配置并失败。

在您的第一个示例中,由于配置发生在配置阶段,一切正常。您的第二个示例尝试在doLast闭包内配置任务 - 就在执行任务之后。

如果你真的需要在doLast中执行某些事情,你可以使用这样的东西,而无需创建特殊任务:

task someTaskName {
    doLast {
        exec {
            commandLine adbCommand
        }
    }
}

这是exec - 用于执行某些命令的规范,它是在同一时间配置和执行的。