gradle Exec块不应该因

时间:2015-09-02 17:49:18

标签: android gradle android-gradle build.gradle gradlew

我正在写一个gradle任务。它调用的任务返回3表示成功运行而不是3.如何进行此操作?

task copyToBuildShare(){
   def robocopySourceDir = "build\\outputs\\apk"
   def cmd = "robocopy "+ robocopySourceDir + " C:\\TEST *.* /MIR /R:5 2>&1"
   exec {
      ignoreExitValue = true
      workingDir '.'
      commandLine "cmd", "/c", cmd
      if (execResult.exitValue == 3) {
         println("It probably succeeded")
      }
   }
}

它给出错误:

  

无法找到属性' execResult'在任务上

我不想创建单独的任务。我希望它在exec块中。我做错了什么?

2 个答案:

答案 0 :(得分:2)

您需要指定此任务的类型为Exec。这是通过指定任务类型来完成的

task testExec(type: Exec) {

}

在您的特定情况下,您还需要确保在exec完成之前不要尝试获取execResult,这可以通过将检查包装在doLast中来完成。

task testExec(type: Exec) {
    doLast {
        if (execResult.exitValue == 3) {
            println("It probably succeeded")

        }
    }
}

以下是执行ls并检查其返回值

的示例
task printDirectoryContents(type: Exec) {

    workingDir '.'
    commandLine "sh", "-c", "ls"

    doLast{
        if (execResult.exitValue == 0) {
            println("It probably succeeded")

        }
    }
}

答案 1 :(得分:2)

project.exec()的返回值类型为ExecResult。

def result = exec {
    ignoreExitValue true 
    executable "cmd"
    args = ["/c", "exit", "1"]
}
println "exit value:"+result.getExitValue()

参考此处:

  

https://docs.gradle.org/current/dsl/org.gradle.api.Project.html#org.gradle.api.Project:exec(groovy.lang.Closure)