【问题标题】:Gradle -- execute multiple commands from taskGradle -- 从任务中执行多个命令
【发布时间】:2016-02-22 18:22:55
【问题描述】:

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

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

那么我是否可以通过一项任务执行两个命令?

【问题讨论】:

  • 创建两个 Exec 任务并从主任务运行它们。
  • 我觉得必须有一个解决方案,您可以利用命令行上的&& 来执行多项操作。或者,您可以调用一个同时执行这两种操作的 shell 脚本。

标签: extjs gradle


【解决方案1】:

你可以使用第二种方式在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 中,以便仅在执行流上执行

【讨论】:

  • 如果您在插件中执行此操作,您需要使用project.exec(以及project.task)来调用正确的DSL方法。
  • 如果第一个命令失败,有没有办法只运行第二个命令?
  • @NoahAndrews 我目前正在为此编写不同的语法,它取自 groovy。有了这个,你可以执行一些东西: def result = "echo 1".execute() 有了这个,你等到完成: result.waitFor() 并得到结果值: result.exitValue()
【解决方案2】:

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

【讨论】:

    【解决方案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'
     }
    }
    

    【讨论】:

    • 太棒了,这让我的生活(构建 :))更轻松!
    【解决方案4】:

    在 doLast 块中使用 .execute()

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

    【讨论】:

      猜你喜欢
      • 2016-11-10
      • 2015-03-06
      • 1970-01-01
      • 2012-10-07
      • 2020-05-25
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多