Qual è la differenza tra queste sintassi di definizione compito in Gradle?
-
03-10-2019 - |
Domanda
A)
task build << {
description = "Build task."
ant.echo('build')
}
B)
task build {
description = "Build task."
ant.echo('build')
}
ho notato che con il tipo B, il codice all'interno del compito sembra essere eseguito quando la tipizzazione gradle -t
- echi ANT OUT 'costruire', anche quando basta sfogliare tutte le varie attività disponibili. La descrizione viene anche effettivamente visualizzato con il tipo B. Tuttavia, con il tipo A senza codice viene eseguito quando si elencano le attività disponibili, e la descrizione non viene visualizzato quando si esegue gradle -t
. La documentazione non sembrano andare nella differenza tra queste due sintassi (che ho trovato), ma solo che è possibile definire un compito in entrambi i casi.
Soluzione
La prima sintassi definisce un task, e fornisce un certo codice da eseguire quando viene eseguito il compito. La seconda sintassi definisce un task, e fornisce un certo codice da eseguire subito per configurare l'attività. Ad esempio:
task build << { println 'this executes when build task is executed' }
task build { println 'this executes when the build script is executed' }
Infatti, la prima sintassi è equivalente a:
task build { doLast { println 'this executes when build task is executed' } }
Quindi, nel tuo esempio sopra, per la sintassi ALLA descrizione non si presenta in -t Gradle perché il codice che imposta la descrizione non viene eseguito fino a quando l'operazione eseguita, cosa che non accade quando si esegue -t Gradle.
Per la sintassi B il codice che fa l'ant.echo () viene eseguito per ogni chiamata di Gradle, tra cui Gradle -t
Per fornire sia un'azione da eseguire e una descrizione per l'operazione si può fare uno di:
task build(description: 'some description') << { some code }
task build { description = 'some description'; doLast { some code } }