Gradle - 从任务执行多个命令

sta*_*ato 29 extjs gradle

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

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

这是我到目前为止:

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

这很好用.

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

 workingDir 'src/main/app/MYOTHERAPP'
 commandLine 'cmd', 'c', 'sencha app build'
Run Code Online (Sandbox Code Playgroud)

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

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

Dra*_*zul 61

您可以使用第二种方式在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'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您在插件中执行此操作,则需要使用`project.exec`(以及`project.task`)来调用正确的DSL方法. (2认同)

Opa*_*pal 7

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


pan*_*ser 5

您也可以使用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'
 }
}
Run Code Online (Sandbox Code Playgroud)