2010-05-04 8 views
42

A)Was ist der Unterschied zwischen diesen Taskdefinitionssyntaxen in Gradle?

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

B)

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

Ich bemerke, dass gradle -t mit Typ-B scheint der Code innerhalb der Task ausgeführt werden, wenn die Eingabe - Ameise 'bauen' Echos aus, auch wenn nur die Auflistung all die verschiedenen verfügbaren Aufgaben. Die Beschreibung wird auch tatsächlich mit Typ B angezeigt. Bei Typ A wird jedoch kein Code ausgeführt, wenn die verfügbaren Aufgaben aufgelistet werden, und die Beschreibung wird nicht angezeigt, wenn gradle -t ausgeführt wird. Die Dokumente scheinen nicht auf den Unterschied zwischen diesen beiden Syntaxen (die ich gefunden habe) einzugehen, nur dass Sie eine Aufgabe in beide Richtungen definieren können.

Antwort

54

Die erste Syntax definiert eine Aufgabe und stellt Code zur Verfügung, der ausgeführt werden soll, wenn die Aufgabe ausgeführt wird. Die zweite Syntax definiert eine Aufgabe und stellt einen Code bereit, der sofort ausgeführt wird, um die Aufgabe zu konfigurieren. Zum Beispiel:

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

In der Tat, die erste Syntax entspricht:

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

in Ihrem Beispiel also oben, für Syntax A ist die Beschreibung zeigt nicht in gradle -t weil der Code nach oben which setzt die Beschreibung wird nicht ausgeführt, bis die Aufgabe ausgeführt wurde, was nicht geschieht, wenn Sie Gradle -t ausführen.

Für Syntax B der Code, der ant.echo tut() wird für jeden Aufruf von gradle laufen, gradle einschließlich -t

sowohl eine Aktion zu schaffen für die Aufgabe auszuführen, und eine Beschreibung, die Sie entweder tun können von:

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

Also, wenn Sie beiden Codes haben, der die Aufgabe als auch Code ausgeführt werden muss, konfiguriert ausgeführt werden, wenn die Aufgabe aufgerufen wird, Syntax B mit einem doLast Verschluss ist der Weg zu gehen. – bergyman

+0

Sieht so aus, als ob die Task Definitionsdefinition '' 'mit [Gradle 3.0] entfernt wird (https://github.com/gradle/gradle/blob/master/design-docs/gradle-3.0.md#clean-up- Task-Dsl-und-Hierarchie)? – mkobit

Verwandte Themen