2016-01-06 14 views
5

Chciałem usunąć plik makefile projektu i napisać kilka ładnych zadań gradle. muszę wykonać następujące zadania, w tej kolejności:Wykonaj zadania budowania androida w zadaniach niestandardowych

  1. Clean Version
  2. Przyrost
  3. budować
  4. Prześlij

# 1, # 3 i # 4 są zadania z Android i plugin (bintray), podczas gdy # 2 to zadanie niestandardowe. Oto co mam do tej pory:

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

Kolejność bieg nie był tak wielki, jak myślę clean był prowadzony po build. I binrayUpload działał bez smaku (release). Próbowałem też bez powodzenia używać dependsOn (zamówienie nie działa).

Nie mogłem znaleźć w Gradle doc, jak to zrobić poprawnie. Po uruchomieniu w odpowiedniej kolejności, od CLI, wszystko działa idealnie.

+0

Jak skorzystałeś z opcji "dependOn"? – RaGe

Odpowiedz

2

Zastosowanie mustRunAfter lub finalizedBy dla drobniejszej kontroli kolejności:

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

Czy to nie działało na przykład po każdym czyszczeniu? –

+0

Nie. Więcej informacji można znaleźć w sekcji 17.5 [tutaj] (https://docs.gradle.org/current/userguide/more_about_tasks.html). – RaGe

+0

dzięki, działa świetnie. Więc jeśli mam rację, 'dependOn' to zadania, które będą uruchamiane w' releaseMajor', ale kolejność nie będzie przestrzegana, dopóki nie zostanie podana później. I zgodnie z dokumentem, w codziennej realizacji 'build' nie byłby uruchamiany po' clean'. Przeczytałem dwa razy dokument i nie było dla mnie jasne. –

0

próbował tego

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' 
} 

Wyjście było

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

i wykonywane ./gradlew bintryUpload

+0

Używam już wykonanego zadania od Androida o nazwie 'clean' lub' build'. Mogę to na nowo zdefiniować. –

+0

Łańcuchowanie 'dependOn' nie jest dobrym rozwiązaniem w tym scenariuszu, ponieważ nie można już uruchamiać poszczególnych zadań, bez uprzedniego wyzwalania zadań w górę łańcucha. Zadania PO są zwykle niezależnymi zadaniami. – RaGe