2010-05-04 15 views
42

)Jaka jest różnica między tymi składniami definicji zadania w gradle?

task build << { 
    description = "Build task." 
    ant.echo('build') 
} 

B)

task build { 
    description = "Build task." 
    ant.echo('build') 
} 

Zauważyłem, że z typu B, kod w ramach zadania wydaje się być wykonywany podczas wpisywania gradle -t - mrówka powtarza się „budować”, nawet gdy po prostu wymieniając wszystkie różne dostępne zadania. Opis jest również wyświetlany z typem B. Jednak w przypadku typu A kod nie jest wykonywany podczas wyświetlania dostępnych zadań, a opis nie jest wyświetlany podczas wykonywania gradle -t. Dokumenty nie wydają się wchodzić w różnice między tymi dwiema składniami (które znalazłem), tylko że możesz zdefiniować zadanie w dowolny sposób.

Odpowiedz

54

Pierwsza składnia definiuje zadanie i podaje kod do wykonania po wykonaniu zadania. Druga składnia definiuje zadanie i dostarcza kod do natychmiastowego wykonania, aby skonfigurować zadanie. Na przykład:

task build << { println 'this executes when build task is executed' } 
task build { println 'this executes when the build script is executed' } 

W rzeczywistości, pierwszy składnia jest równoważna:

task build { doLast { println 'this executes when build task is executed' } } 

Tak, w powyższym przykładzie, dla składni A opis nie pokazać się w Gradle -t, ponieważ kod który ustawia opis nie jest wykonywany aż do wykonania zadania, co nie dzieje się po uruchomieniu gradle-t.

składnią B kod, który robi ant.echo() jest prowadzony za każdym wywołaniu Gradle, w tym Gradle -t

Aby zapewnić zarówno czynność do wykonania i opis zadania można wykonać jedną od:

task build(description: 'some description') << { some code } 
task build { description = 'some description'; doLast { some code } } 
+1

Więc jeśli masz zarówno kod, który musi być wykonany, aby skonfigurować zadanie, jak również kod wykonywany gdy zadanie jest nazywany, składnia B z zamknięciem doLast jest droga. – bergyman

+0

Wygląda na to, że składnia definicji '<<' jest usuwana za pomocą [Gradle 3.0] (https://github.com/gradle/gradle/blob/master/design-docs/gradle-3.0.md#clean-up- task-dsl-and-hierarchy)? – mkobit