2016-01-06 148 views
5

我想刪除項目makefile並編寫一些很好的gradle任務。 我需要執行以下任務,順序如下:在自定義任務中執行android構建任務

  1. 清潔
  2. 增量版本
  3. 構建
  4. 上傳

#1,#3,#4是從任務android和插件(bintray),而#2是一個自定義任務。以下是我迄今爲止:

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

運行順序是沒有那麼大,因爲我認爲cleanbuild後運行。並且binrayUpload運行時沒有味道(release)。我也嘗試使用dependsOn沒有成功(命令不起作用)。

我無法在Gradle doc中找到如何正確執行此操作。當按照正確的順序執行命令時,一切都完美無缺。

+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節[此處](https://docs.gradle.org/current/userguide/more_about_tasks.html)。 – RaGe

+0

謝謝,效果很好。所以,如果我是正確的,'dependsOn'是將在'releaseMajor'中運行的任務,但是直到指定它之後纔會遵守順序。根據文檔,在日常執行中,'build'不會在'clean'後面運行。我讀過兩次文檔,但對我來說不是很清楚。 –

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

我使用已經完成的android任務,名爲'clean'或'build'。我可以重新定義它。 –

+0

在這種情況下,鏈接'dependsOn'並不是一個好的解決方案,因爲如果你願意,你不能再運行每個單獨的任務,而不會首先觸發鏈上的任務。 OPs任務通常是獨立的任務。 – RaGe

相關問題