2013-07-03 12 views
11

Po zbudowaniu pliku wyjściowego z Gradle, chcę zrobić 2 rzeczy. Zaktualizuj lokalny plik version.properties i skopiuj ostateczny wynik końcowy do określonego katalogu w celu archiwizacji. Załóżmy, że mam już 2 zaimplementowane metody, które robią dokładnie to, co właśnie opisałem, updateVersionProperties() i archiveOutputFile().Lepiej używać zależności zadań lub task.doLast w Gradle?

Ja wiem zastanawiać, co jest najlepszym sposobem, aby to zrobić ...

Alternatywa A:

assembleRelease.doLast { 
    updateVersionProperties() 
    archiveOutputFile() 
} 

Alternatywa B:

task myBuildTask(dependsOn: assembleRelease) << { 
    updateVersionProperties() 
    archiveOutputFile() 
} 

I tu nazwałbym myBuildTask zamiast assembleRelease jak w przypadku alternatywy A.

Który z nich jest zalecanym sposobem i dlaczego? Czy jest jakaś przewaga jednej nad drugą? Chciałbym wyjaśnienia proszę ... :)

Odpowiedz

13

Kiedy tylko możesz, zamodeluj nowe zajęcia jako osobne zadania. (W przypadku, można dodać dwa więcej zadań). Ma to wiele zalet:

  • Lepsze komentarze, co do których działalność jest aktualnie wykonywany lub nie
  • możliwość zadeklarowania wejścia zadanie i wyjść (czerpania wszystko korzyści, które pochodzą z tego)
  • możliwość ponownego wykorzystania istniejących typów zadanie
  • Więcej możliwości Gradle do wykonywania zadań w równoległym
  • Itd

Czasami trudno jest modelować działanie jako oddzielne zadanie. (Jednym z przykładów jest sytuacja, w której konieczne jest późniejsze przetworzenie danych wyjściowych istniejącego zadania, co spowoduje, że pierwotne zadanie nie będzie nigdy wykonywane przy kolejnych uruchomieniach.) Tylko wtedy aktywność powinna być dołączona do istniejące zadanie z doLast.

+1

Jak radzić sobie z tworzeniem zależności między tymi zadaniami? Chciałbym wykonać jedno zadanie, aby złożyć cały projekt (zasadniczo "zastępując" 'assembleRelease') i oba te zadania muszą być wykonane ** po udanym ** wykonaniu' assembleRelease'. Między nimi kolejność nie jest istotna. –

+6

'myBuildTask.dependsOn (updateVersionProperties, archiveOutputFile); updateVersionProperties.dependsOn (assembleRelease); archiveOutputFile.dependsOn (assembleRelease) ' –

Powiązane problemy