2014-05-06 44 views
21

Mam bardzo proste kompilacji skryptu podobnie jakGradle wykonuje wszystkie zadania?

task hello{ 
    println("hello World") 
} 

task bye { 
    println("bye") 
} 

Na linii poleceń uruchomić gradle hello i pojawia się następujący komunikat:

hello World 
bye 
:hello UP-TO-DATE 

Dlaczego wykonywania zadania „bye” (Zakładam, że zostanie on wykonany, ponieważ drukowane jest "do widzenia"? Dzięki.

+1

Kciuk w górę na pytanie. Miałem dziś ten sam problem i zastanawiałem się, dlaczego tak się dzieje! –

+0

Dzięki! Cieszę się, że ci pomogło :) – user3240644

+2

Podobne pytanie: http://stackoverflow.com/questions/20737494/why-is-my-gradle-task-always-running – liquide

Odpowiedz

37

To nic wspólnego pułapka:

task hello { 
    println("Any code in here is about *configuring* the\ 
    task. By default, all tasks always get configured.") 
    doLast { 
     println("Any code in here is about *executing* the task.\ 
     This code only gets run if and when Gradle decides to execute the task.") 
    } 
} 

Rozróżnienie fazie konfiguracji i fazie realizacji jest prawdopodobnie jednym z najważniejszych koncepcji zrozumieć w Gradle. Początkowo może być mylące i może zniknąć w przyszłości. Rodzaj analogiem w świecie Ant/Maven polega na tym, że narzędzia te najpierw parsują skrypty budujące XML i budują model obiektów (prawdopodobnie rozwiązując niektóre właściwości po drodze), a dopiero potem wykonują kompilację.

+0

Dzięki, to na pewno wyjaśnia rzeczy! :) – user3240644

+0

Ten problem nie występuje, jeśli typem zadania jest GradeBuild. Nie jest jasne, kiedy dodać opcję doLast – lives

Powiązane problemy