Gradle - Compiti

Lo script di build Gradle descrive uno o più progetti. Ogni progetto è composto da diverse attività. Un'attività è un lavoro svolto da una build. L'attività potrebbe essere la compilazione di alcune classi, l'archiviazione di file di classe in una cartella di destinazione separata, la creazione di JAR, la generazione di Javadoc o la pubblicazione di alcuni risultati in un repository.

Questo capitolo spiega cos'è un'attività e come generare ed eseguire un'attività.

Definizione di attività

Task è una parola chiave utilizzata per definire un'attività nello script di build. Dai un'occhiata al seguente esempio che rappresenta un'attività denominatahello che stampa tutorialspoint. Copia e salva il seguente script in un file denominatobuild.gradle. Questo script di build definisce un nome di attività hello che viene utilizzato per stampare la stringa tutorialspoint.

task hello {
   doLast {
      println 'tutorialspoint'
   }
}

Esegui il seguente comando nel prompt dei comandi. Esegue lo script precedente. Dovresti eseguirlo dove è archiviato il file build.gradle.

C:\> gradle –q hello

Produzione:

tutorialspoint

Puoi semplificare questa attività hello specificando una scorciatoia (rappresenta un simbolo <<) al doLastdichiarazione. Se aggiungi questo collegamento all'attività precedentehello sarà simile al seguente script.

task hello << {
   println 'tutorialspoint'
}

Puoi eseguire lo script sopra usando gradle –q hello comando.

Ecco alcune variazioni nella definizione di un'attività, dai un'occhiata. L'esempio seguente definisce un'attivitàhello.

Copia e salva il codice seguente in build.gradle file.

task (hello) << {
   println "tutorialspoint"
}

Esegui il seguente comando nel prompt dei comandi. Esegue lo script sopra indicato. Dovresti eseguirlo, dove viene memorizzato il file build.gradle.

C:\> gradle –q hello

Produzione:

tutorialspoint

È inoltre possibile utilizzare stringhe per i nomi delle attività. Dai un'occhiata allo stesso esempio di ciao. Qui useremo String come task.

Copia e salva il codice seguente in build.gradle file.

task('hello') << {
   println "tutorialspoint"
}

Esegui il seguente comando nel prompt dei comandi. Esegue lo script sopra indicato. Dovresti eseguirlo, dove viene memorizzato il file build.gradle.

C:\> gradle –q hello

Produzione:

tutorialspoint

È inoltre possibile utilizzare una sintassi alternativa per definire un'attività. Questo sta usando il metodo create () per definire un'attività. Dai un'occhiata allo stesso esempio di ciao riportato di seguito.

Copia e salva il codice indicato di seguito in build.gradle file.

tasks.create(name: 'hello') << {
   println "tutorialspoint"
}

Esegui il seguente comando nel prompt dei comandi. Esegue lo script sopra indicato. Dovresti eseguirlo, dove viene memorizzato il file build.gradle.

C:\> gradle –q hello

Produzione:

tutorialspoint

Individuazione delle attività

Se si desidera individuare le attività definite nel file di compilazione, è necessario utilizzare le rispettive proprietà del progetto standard. Ciò significa che ogni attività è disponibile come proprietà del progetto, utilizzando il nome dell'attività come nome della proprietà.

Dai un'occhiata al codice seguente che accede alle attività come proprietà.

Copia e salva il codice indicato di seguito in build.gradle file.

task hello

println hello.name
println project.hello.name

Esegui il seguente comando nel prompt dei comandi. Esegue lo script sopra indicato. Dovresti eseguirlo, dove viene memorizzato il file build.gradle.

C:\> gradle –q hello

Produzione:

hello
hello

È inoltre possibile utilizzare tutte le proprietà tramite la raccolta di attività.

Copia e salva il codice seguente in build.gradle file.

task hello

println tasks.hello.name
println tasks['hello'].name

Esegui il seguente comando nel prompt dei comandi. Esegue lo script sopra indicato. Dovresti eseguirlo, dove viene memorizzato il file build.gradle.

C:\> gradle –q hello

Produzione:

hello
hello

È inoltre possibile accedere al percorso dell'attività utilizzando le attività. Per questo puoi chiamare il metodo getByPath () con un nome di attività, un percorso relativo o un percorso assoluto.

Copia e salva il codice indicato di seguito in build.gradle file.

project(':projectA') {
   task hello
}
task hello

println tasks.getByPath('hello').path
println tasks.getByPath(':hello').path
println tasks.getByPath('projectA:hello').path
println tasks.getByPath(':projectA:hello').path

Esegui il seguente comando nel prompt dei comandi. Esegue lo script sopra indicato. Dovresti eseguirlo, dove viene memorizzato il file build.gradle.

C:\> gradle –q hello

Produzione:

:hello
:hello
:projectA:hello
:projectA:hello

Aggiunta di dipendenze alle attività

È possibile fare in modo che un'attività dipenda da un'altra attività, il che significa che quando un'attività viene eseguita, verrà avviata solo un'altra attività. Ogni attività è differenziata con il nome dell'attività. La raccolta di nomi di attività viene definita dalla relativa raccolta di attività. Per fare riferimento a un'attività in un altro progetto, è necessario utilizzare il percorso del progetto come prefisso al rispettivo nome dell'attività.

L'esempio seguente che aggiunge una dipendenza da taskX a taskY.

Copia e salva il codice indicato di seguito in build.gradlefile. Dai un'occhiata al seguente codice.

task taskX << {
   println 'taskX'
}
task taskY(dependsOn: 'taskX') << {
   println "taskY"
}

Esegui il seguente comando nel prompt dei comandi. Esegue lo script sopra indicato. Dovresti eseguire questo, dove il filebuild.gradle archivi di file.

C:\> gradle –q taskY

Produzione:

taskX
taskY

L'esempio precedente aggiunge la dipendenza dall'attività utilizzando i suoi nomi. C'è un altro modo per ottenere la dipendenza dell'attività che è definire la dipendenza utilizzando un oggetto Attività.

Prendiamo lo stesso esempio di taskY dipendente da taskX ma stiamo usando oggetti task invece di nomi di riferimento di task.

Copia e salva il codice seguente in build.gradle file.

task taskY << {
   println 'taskY'
}
task taskX << {
   println 'taskX'
}
taskY.dependsOn taskX

Esegui il seguente comando nel prompt dei comandi. Dovresti eseguirlo dove è archiviato il file build.gradle.

C:\> gradle –q taskY

Produzione:

taskX
taskY

L'esempio precedente aggiunge la dipendenza dall'attività utilizzando i suoi nomi. C'è un altro modo per ottenere la dipendenza dell'attività che è definire la dipendenza utilizzando un oggetto Attività.

Qui prendiamo lo stesso esempio in cui taskY dipende da taskX ma stiamo usando oggetti attività invece di nomi di riferimenti attività. Dai un'occhiata.

Copia e salva il codice indicato di seguito in build.gradlefile. Dai un'occhiata al seguente codice.

task taskX << {
   println 'taskX'
}
taskX.dependsOn {
   tasks.findAll { 
      task → task.name.startsWith('lib') 
   }
}
task lib1 << {
   println 'lib1'
}
task lib2 << {
   println 'lib2'
}
task notALib << {
   println 'notALib'
}

Esegui il seguente comando nel prompt dei comandi. Esegue lo script sopra indicato. Dovresti eseguire questo, dove il filebuild.gradle archivi di file.

C:\> gradle –q taskX

Produzione:

lib1
lib2
taskX

Aggiunta di una descrizione a un'attività

Puoi aggiungere una descrizione alla tua attività. Questa descrizione viene visualizzata durante l'esecuzioneGradle tasks. Ciò è possibile utilizzando la parola chiave descrizione.

Copia e salva il codice seguente in build.gradlefile. Dai un'occhiata al seguente codice.

task copy(type: Copy) {
   description 'Copies the resource directory to the target directory.'
   from 'resources'
   into 'target'
   include('**/*.txt', '**/*.xml', '**/*.properties')
   println("description applied")
}

Esegui il seguente comando nel prompt dei comandi. Dovresti eseguirlo dove è archiviato il file build.gradle.

C:\> gradle –q copy

Se il comando viene eseguito correttamente, otterrai il seguente output.

description applied

Saltare le attività

È possibile saltare le attività passando una chiusura del predicato. Ciò è possibile solo se il metodo di un'attività o una chiusura che lancia un fileStopExecutionException prima che venga eseguito il lavoro effettivo di un'attività.

Copia e salva il codice seguente in build.gradle file.

task eclipse << {
   println 'Hello Eclipse'
}

// #1st approach - closure returning true, if the task should be executed, false if not.
eclipse.onlyIf {
   project.hasProperty('usingEclipse')
}

// #2nd approach - alternatively throw an StopExecutionException() like this
eclipse.doFirst {
   if(!usingEclipse) {
      throw new StopExecutionException()
   }
}

Esegui il seguente comando nel prompt dei comandi. Dovresti eseguirlo dove è archiviato il file build.gradle.

C:\> gradle –q eclipse

Struttura dell'attività

Gradle ha diverse fasi, quando si lavora con le attività. Prima di tutto, c'è una fase di configurazione, dove viene eseguito il codice, che viene specificato direttamente alla chiusura di un'attività. Il blocco di configurazione viene eseguito per ogni attività disponibile e non solo per quelle attività che vengono effettivamente eseguite successivamente.

Dopo la fase di configurazione, la fase di esecuzione esegue il codice all'interno del file doFirst o doLast chiusure di tali attività, che vengono effettivamente eseguite.