Gradle - 从任务执行多个命令

问题描述 投票:24回答:4

我有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'

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

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

extjs gradle
4个回答
56
投票

您可以使用第二种方式在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中才能仅在执行流程上执行


7
投票

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


4
投票

您也可以使用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'
 }
}

0
投票

在doLast块使用.execute()

task myTask(group: "my-group") {
       doLast {
             println "Starting..."
             println "echo \"MyEcho1\"".execute().text.trim()
             println "echo \"MyEcho2\"".execute().text.trim()
       }
    }
© www.soinside.com 2019 - 2024. All rights reserved.