web-dev-qa-db-ja.com

Gradle-タスクから複数のコマンドを実行する

2つの個別のビルド(sencha cmd)を必要とする2つの個別のアプリ(1つのプロジェクト)があります。私は両方のアプリを構築するでしょうGradleのスクリプトを作成するように求めてきました。

1つのアプリをビルドするタスクを作成しましたが、同じタスクを使用して2番目のアプリをビルドするのに問題があります。

これは私がこれまでに持っているものです:

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'

最初のコマンドは無視され、2番目のコマンドのみが実行されます。

とにかく、1つのタスクで両方のコマンドを実行できますか?

26
stackato

2番目の方法を使用して、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'
    }
  }
}

実行フローでのみ実行するには、doLastにexecメソッドを配置する必要があります

57
Drazul

タイプExecのタスクに対して複数のコマンドを構成(実行)することは不可能です。 commandLineそれは単なるセッターです-最後のものが勝ちです。複数のコマンドを実行する必要がある場合、コメントで提案されている@RaGeのように複数のタスクを実装するか、カスタムタスクを作成してgroovyのネイティブメカニズム-executeメソッドを使用するのが最適です。

7
Opal

代わりにgradle methodsを使用して、架空のタスクを作成することもできます

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
panser

DoLastブロックで.execute()を使用します

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