2016-01-06 4 views
5

私はプロジェクトのmakefileを削除し、すてきなグラベルタスクを書こうと思っていました。 私はこの順序で、次のタスクを実行する必要があります。カスタムタスクでアンドロイドビルドタスクを実行する

  1. クリーン
  2. インクリメントバージョン
  3. ビルド
  4. アップロード

#1、#3、#4でからタスクですアンドロイドとプラグイン(bintray)、#2はカスタムタスクです。ここで私はこれまで持っているものです:私はcleanbuild後に実行されたと考えるよう

task releaseMajor { 
    doLast { 
     clean.execute() 
     build.execute() 
     incrementVersion.execute() 
     bintrayUpload.execute() 
    } 
} 

実行順序はそれほど大きくありませんでした。 binrayUploadはフレーバーなしで実行していました(release)。私はまた、dependsOnを成功させずに使用しようとしました。

Gradleの文書でこれを正しく実行する方法が見つかりませんでした。 CLIから正しい順序で実行すると、すべてが完全に機能します。

+0

どうやって 'dependsOn'を使いましたか? – RaGe

答えて

2
使用 mustRunAfter

、又はより細かい順序制御用finalizedBy

task releaseMajor (dependsOn: ['clean', 'build', 'incrementVersion', 'bintrayUpload']) 
build.mustRunAfter clean 
incrementVersion.mustRunAfter build 
bintrayUpload.mustRunAfter incrementVersion 
+0

これを実行すると、すべてのクリーンアップ後にビルドなどが実行されませんか? –

+0

。詳細については、17.5 [here](https://docs.gradle.org/current/userguide/more_about_tasks.html)を参照してください。 – RaGe

+0

ありがとう、素晴らしい作品。ですから、もし私が正しいのであれば、 'dependsOn'は' releaseMajor'で実行されるタスクですが、その順序は後で指定されるまで尊重されません。そして医者によると、毎日の実行において、 'ビルド'は 'クリーン'の後に実行されないだろう。私はその文書を2度読みましたが、それは私にはあまり明確ではありませんでした。 –

0

試みこの

task clean { 
    println 'clean task executing' 
} 
task incrementVersion (dependsOn:"clean"){ 
    println 'incrementVersion task executing' 
} 
task building (dependsOn:"incrementVersion"){ 
    println 'build task executing' 
} 
task bintrayUpload (dependsOn:"building") { 
    println 'bintrayUpload task executing' 
} 

出力された

clean task executing 
incrementVersion task executing 
build task executing 
bintrayUpload task executing 

て実行./gradlew bintryUpload

+0

私はアンドロイドから 'clean'または' build'という名前のタスクを使っています。私はそれを再定義することができます。 –

+0

チェイン 'dependsOn'はこのシナリオでは良い解決策ではありません。なぜなら、最初にチェーンの上にあるタスクをトリガーせずに、個々のタスクを実行できなくなるからです。 OPのタスクは本当に通常は独立したタスクです。 – RaGe

関連する問題