Was ist der Unterschied zwischen dieser Aufgabendefinition Syntaxen in gradle?

StackOverflow https://stackoverflow.com/questions/2767888

  •  03-10-2019
  •  | 
  •  

Frage

A)

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

B)

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

Ich stelle fest, dass mit Typ B, der Code innerhalb der Task ausgeführt zu werden scheint, wenn die Eingabe gradle -t - ant Echos aus ‚bauen‘, selbst wenn nur alle die verschiedenen verfügbaren Aufgaben auflistet. Die Beschreibung wird auch tatsächlich mit Typ B angezeigt jedoch mit Typ A kein Code ausgeführt wird, wenn die zur Verfügung stehenden Aufgaben Auflistung aus, und die Beschreibung wird nicht angezeigt, wenn gradle -t ausgeführt wird. Die docs scheinen nicht zwischen diesen beiden Syntaxen in der Differenz zu gehen (die ich gefunden habe), nur dass Sie eine Aufgabe oder so definieren können.

War es hilfreich?

Lösung

Die erste Syntax definiert eine Aufgabe, und bietet einige Code, wenn die Aufgabe ausführt, ausgeführt werden. Die zweite Syntax definiert eine Aufgabe, und bietet einige Code sofort die Aufgabe konfigurieren ausgeführt werden. 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 ist die erste Syntax ist äquivalent zu:

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

Also, in Ihrem obigen Beispiel für die Syntax-A ist die Beschreibung zeigt nicht in gradle -t, weil der Code, der die Beschreibung stellt nicht bis zur Aufgabe ausgeführt wird ausgeführt, was nicht geschieht, wenn Sie gradle -t laufen.

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

beide Um eine Aktion bieten auszuführen und eine Beschreibung für die Aufgabe, die Sie entweder tun können:

task build(description: 'some description') << { some code }
task build { description = 'some description'; doLast { some code } }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top