2017-02-14 83 views
1

我要执行从gradle这个任务的命令行命令的一些(e.g打印目录中的所有文件):摇篮,任务类型:执行 - 命令行不行在onLast

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

我得到错误:

失败:建立失败,一个例外。

  • 出了什么问题:

执行失败的任务 ':应用程序:目录'。

execCommand == null!

+0

可能重复[Gradle,commandLine'cmd','/ c','echo doLast!'什么都不做](http://stackoverflow.com/questions/42055620/gradle-commandline-cmd-c-echo-dolast-does-nothing) – sm4

回答

0

的原因是在事实上,Exec这个任务应该在构建的配置阶段进行配置,否则,你的任务将不会配置和失败。

在你的第一个例子中,一切工作都是由于配置发生在配置阶段。您的第二个示例尝试在doLast闭包中配置任务,即在任务执行之后。

如果你真的需要在doLast执行的东西,你可以使用这样的事情,而不会产生特殊的任务:

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

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