Un'attività personalizzata a Gradle

1. Panoramica

In questo articolo, vedremo come creare un'attività personalizzata in Gradle . Mostreremo una nuova definizione di attività utilizzando uno script di compilazione o un tipo di attività personalizzato.

Per l'introduzione al Gradle, vedere questo articolo. Contiene le basi di Gradle e, cosa è più importante per questo articolo, l'introduzione alle attività di Gradle.

2. Definizione dell'attività personalizzata all'interno di build.gradle

Per creare un'attività Gradle semplice, dobbiamo aggiungere la sua definizione al nostro file build.gradle :

task welcome { doLast { println 'Welcome in the Baeldung!' } } 

L'obiettivo principale dell'attività di cui sopra è solo stampare il testo "Benvenuti nella Baeldung!". Possiamo verificare se questa attività è disponibile eseguendo gradle tasks –all command:

gradle tasks --all 

L'attività è nell'elenco sotto il gruppo Altre attività :

Other tasks ----------- welcome

Può essere eseguito proprio come qualsiasi altra attività Gradle:

gradle welcome 

L'output è come previsto: il "Welcome in the Baeldung!" Messaggio.

Nota: se l'opzione –all non è impostata, le attività che appartengono alla categoria "Altro" non sono visibili. L'attività Gradle personalizzata può appartenere a un gruppo diverso da "Altro" e può contenere una descrizione.

3. Imposta gruppo e descrizione

A volte è utile raggruppare le attività per funzione, in modo che siano visibili in una categoria. Possiamo impostare rapidamente un gruppo per le nostre attività personalizzate, semplicemente definendo una proprietà di gruppo :

task welcome { group 'Sample category' doLast { println 'Welcome on the Baeldung!' } }

Ora quando eseguiamo il comando Gradle per elencare tutte le attività disponibili (l' opzione –all non è più necessaria), vedremo la nostra attività sotto un nuovo gruppo:

Sample category tasks --------------------- welcome 

Tuttavia, è anche vantaggioso per gli altri vedere di cosa è responsabile un'attività. Possiamo creare una descrizione che contenga brevi informazioni:

task welcome { group 'Sample category' description 'Tasks which shows a welcome message' doLast { println 'Welcome in the Baeldung!' } } 

Quando stampiamo un elenco delle attività disponibili, l'output sarà il seguente:

Sample category tasks --------------------- welcome - Tasks which shows a welcome message 

Questo tipo di definizione dell'attività è chiamata definizione ad-hoc .

Andando oltre, è vantaggioso creare un'attività personalizzabile la cui definizione può essere riutilizzata. Tratteremo come creare un'attività da un tipo e come rendere disponibili alcune personalizzazioni agli utenti di questa attività.

4. Definire il tipo di attività Gradle all'interno di build.gradle

La suddetta attività di "benvenuto" non può essere personalizzata, quindi, nella maggior parte dei casi, non è molto utile. Possiamo eseguirlo, ma se ne abbiamo bisogno in un progetto (o sottoprogetto) diverso, dobbiamo copiare e incollare la sua definizione.

Possiamo abilitare rapidamente la personalizzazione dell'attività creando un tipo di attività . Semplicemente, un tipo di attività è definito all'interno dello script di compilazione:

class PrintToolVersionTask extends DefaultTask { String tool @TaskAction void printToolVersion() { switch (tool) { case 'java': println System.getProperty("java.version") break case 'groovy': println GroovySystem.version break default: throw new IllegalArgumentException("Unknown tool") } } }

Un tipo di attività personalizzata è una semplice classe Groovy che estende DefaultTask , la classe che definisce l'implementazione dell'attività standard. Ci sono altri tipi di attività da cui possiamo estendere, ma nella maggior parte dei casi, la classe DefaultTask è la scelta appropriata.

L' attività PrintToolVersionTask contiene la proprietà dello strumento che può essere personalizzata dalle istanze di questa attività:

String tool 

Possiamo aggiungere tutte le proprietà che vogliamo: tieni presente che è solo un semplice campo di classe Groovy.

Inoltre, contiene il metodo annotato con @TaskAction . Definisce cosa sta facendo questo compito . In questo semplice esempio stampa la versione di Java o Groovy installati - dipende dal valore del parametro fornito.

Per eseguire un'attività personalizzata in base al tipo di attività creata, è necessario creare una nuova istanza di attività di questo tipo :

task printJavaVersion(type : PrintToolVersionTask) { tool 'java' } 

Le parti più importanti sono:

  • il nostro compito è di tipo PrintToolVersionTask , quindi una volta eseguito attiverà l'azione definita nel metodo annotato con @TaskAction
  • abbiamo aggiunto un valore di proprietà dello strumento personalizzato ( java ) che verrà utilizzato da PrintToolVersionTask

Quando eseguiamo l'attività di cui sopra, l'output è come previsto (dipende dalla versione Java installata):

> Task :printJavaVersion 9.0.1 

Ora creiamo un'attività che stampa la versione installata di Groovy:

task printGroovyVersion(type : PrintToolVersionTask) { tool 'groovy' } 

Utilizza lo stesso tipo di attività definito in precedenza, ma ha un valore di proprietà dello strumento diverso. Quando eseguiamo questa attività, stampa la versione Groovy:

> Task :printGroovyVersion 2.4.12 

Se non abbiamo troppe attività personalizzate, possiamo definirle direttamente nel file build.gradle (come abbiamo fatto sopra). Tuttavia, se ce ne sono più di pochi, la nostra build. gradle file diventa difficile da leggere e capire.

Fortunatamente, Gradle fornisce alcune soluzioni per questo.

5. Definire il tipo di attività nella cartella buildSrc

We can define task types in the buildSrc folder which is located at the root project level. Gradle compiles everything that is inside and adds types to the classpath so our build script can use it.

Our task type which we defined before (PrintToolVersionTask) can be moved into the buildSrc/src/main/groovy/com/baeldung/PrintToolVersionTask.groovy. We have to only add some imports from Gradle API into a moved class.

We can define an unlimited number of tasks types in the buildSrc folder. It's easier to maintain, read, and the task type declaration isn't in the same place as the task instantiation.

We can use these types the same way we're using types defined directly in the build script. We have to remember only to add appropriate imports.

6. Define Task Type in the Plugin

We can define a custom task types inside a custom Gradle plugin. Please refer to this article, which describes how to define a custom Gradle plugin, defined in the:

  • build.gradle file
  • buildSrc folder as other Groovy classes

These custom tasks will be available for our build when we define a dependency to this plugin. Please note that ad-hoc tasks are also available – not only custom task types.

7. Conclusion

In questo tutorial, abbiamo spiegato come creare un'attività personalizzata in Gradle. Ci sono molti plugin disponibili che puoi usare nel tuo file build.gradle che forniranno molti tipi di attività personalizzati di cui hai bisogno.

Come sempre, gli snippet di codice sono disponibili su GitHub.