42 votes

Quelle est la différence entre ces syntaxes de définition de tâche dans gradle ?

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

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

Je remarque qu'avec le type B, le code dans la tâche semble être exécuté lorsque l'on tape gradle -t - ant fait écho à 'build' même lorsqu'il ne fait que lister les différentes tâches disponibles. La description est également affichée avec le type B. Cependant, avec le type A, aucun code n'est exécuté lors de l'énumération des tâches disponibles, et la description n'est pas affichée lors de l'exécution de la commande gradle -t . La documentation ne semble pas expliquer la différence entre ces deux syntaxes (pour autant que je l'aie trouvée), mais seulement que vous pouvez définir une tâche de l'une ou l'autre manière.

56voto

Adam Murdoch Points 576

La première syntaxe définit une tâche, et fournit du code à exécuter lorsque la tâche s'exécute. La seconde syntaxe définit une tâche, et fournit du code à exécuter immédiatement pour configurer la tâche. Par exemple :

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

En fait, la première syntaxe est équivalente à :

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

Ainsi, dans votre exemple ci-dessus, pour la syntaxe A, la description n'apparaît pas dans gradle -t parce que le code qui définit la description n'est pas exécuté avant que la tâche ne soit exécutée, ce qui ne se produit pas lorsque vous exécutez gradle -t.

Pour la syntaxe B, le code qui effectue le ant.echo() est exécuté à chaque invocation de gradle, y compris gradle -t

Pour fournir à la fois une action à exécuter et une description de la tâche, vous pouvez faire l'un ou l'autre :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X