Gradle - 从任务执行多个命令

时间:2016-02-22 18:22:55

标签: extjs gradle

我有2个独立的应用程序(在一个项目中),需要2个独立的构建(sencha cmd)。我被要求创建一个gradle脚本,它将为两个应用程序执行构建。

我创建了一个构建一个应用程序的任务,但是使用相同的任务构建第二个应用程序时遇到了麻烦。

这是我到目前为止所做的:

task senchaCmdBuild (type: Exec) {
  workingDir 'src/main/app/MYAPP'
  commandLine 'cmd', 'c', 'sencha app build'
}

这很好。

当我将以下2行添加到上述任务时:

 workingDir 'src/main/app/MYOTHERAPP'
 commandLine 'cmd', 'c', 'sencha app build'

忽略第一个命令,只执行第二个命令。

那么无论如何我可以用一个任务执行这两个命令吗?

4 个答案:

答案 0 :(得分:49)

您可以使用第二种方式在gradle上声明任务类型。

task senchaCmdBuild {
  doLast {
    exec {
      workingDir 'src/main/app/MYAPP'
      commandLine 'cmd', 'c', 'sencha app build'
    }
    exec {
      workingDir 'src/main/app/MYOTHERAPP'
      commandLine 'cmd', 'c', 'sencha app build'
    }
  }
}

您需要将exec方法放在doLast中才能仅在执行流程上执行

答案 1 :(得分:7)

无法为Exec类型的任务配置(运行)多个命令。 commandLine它只是一个二传手 - 最后一个获胜。如果你需要运行多个命令,最好的想法是在注释中建议@RaGe实现多个任务,或编写自定义任务并使用groovy的本机机制 - execute方法。

答案 2 :(得分:3)

您还可以使用 gradle方法来创建虚拟任务

task senchaBuild() {
 doLast {
    senchaBuild_steps()
 }
}

void senchaBuild_steps() {
 exec {
    workingDir 'src/main/app/MYAPP'
    commandLine 'cmd', 'c', 'sencha app build'
 }
 exec {
    workingDir 'src/main/app/MYOTHERAPP'
    commandLine 'cmd', 'c', 'sencha app build'
 }
}

答案 3 :(得分:0)

在doLast块上使用.execute()

task myTask(group: "my-group") {
       doLast {
             println "Starting..."
             println "echo \"MyEcho1\"".execute().text.trim()
             println "echo \"MyEcho2\"".execute().text.trim()
       }
    }