【问题标题】:Gradle, task type: Exec - commandLine not work in onLastGradle,任务类型:Exec - commandLine 在 onLast 中不起作用
【发布时间】:2017-02-14 18:02:44
【问题描述】:

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

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)
  }
}

我得到错误:

FAILURE:构建失败并出现异常。

  • 出了什么问题:

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

execCommand == null!

【问题讨论】:

标签: gradle


【解决方案1】:

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

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

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

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

这里是exec-specification 用于执行一些命令,它是同时配置和执行的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多