Gradle - Costruisci script

Gradle crea un file di script per gestire due cose; uno èprojects e un altro lo è tasks. Ogni build Gradle rappresenta uno o più progetti. Un progetto rappresenta una libreria JAR o un'applicazione web oppure potrebbe rappresentare uno ZIP assemblato dai JAR prodotti da altri progetti. In parole semplici, un progetto è composto da diversi compiti. Un'attività indica un lavoro svolto da una build. Un'attività potrebbe essere la compilazione di alcune classi, la creazione di un JAR, la generazione di Javadoc o la pubblicazione di alcuni archivi in ​​un repository.

Gradle utilizza Groovy language per scrivere sceneggiature.

Scrittura di Build Script

Gradle fornisce un DSL (Domain Specific Language), per la descrizione delle build. Questo utilizza il linguaggio Groovy per semplificare la descrizione di una build. Ogni script di build di Gradle è codificato utilizzando UTF-8, salvato offline e denominato build.gradle.

build.gradle

Stiamo descrivendo attività e progetti utilizzando uno script Groovy. Puoi eseguire una build Gradle utilizzando il comando Gradle. Questo comando cerca un file chiamatobuild.gradle. Dai un'occhiata al seguente esempio che rappresenta un piccolo script che viene stampatotutorialspoint. Copia e salva il seguente script in un file denominatobuild.gradle. Questo script di compilazione 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 è memorizzato il file build.gradle.

C:\> gradle –q hello

Produzione:

tutorialspoint

Se pensi che l'attività funzioni in modo simile all'obiettivo di ANT, allora è vero: l'attività Gradle è equivalente all'obiettivo ANT.

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'
}

Come lo stesso sopra puoi eseguire lo script sopra usando gradle –q hello comando.

Lo script Grade utilizza principalmente due Oggetti reali, uno è Oggetto Progetto e un altro è Oggetto Script.

Project Object- Ogni script descrive uno o più progetti. Durante l'esecuzione, questo script configura l'oggetto del progetto. È possibile chiamare alcuni metodi e utilizzare proprietà nello script di compilazione delegate all'oggetto del progetto.

Script Object- Gradle ha preso il codice dello script in classi che implementano l'interfaccia dello script e quindi vengono eseguite. Ciò significa che tutte le proprietà e i metodi dichiarati dall'interfaccia dello script sono disponibili nel tuo script.

La tabella seguente definisce l'elenco di standard project properties. Tutte queste proprietà sono disponibili nel tuo script di build.

Sr. No. Nome genere Valore predefinito
1 progetto Progetto L'istanza di Project
2 nome Corda Il nome della directory del progetto.
3 sentiero Corda Il percorso assoluto del progetto.
4 descrizione Corda Una descrizione per il progetto.
5 projectDir File La directory contenente lo script di compilazione.
6 buildDir File projectDir / build
7 gruppo Oggetto Non specificato
8 versione Oggetto Non specificato
9 formica AntBuilder Un'istanza di AntBuilder

Fondamenti di Groovy

Gli script di build Gradle utilizzano l'API Groovy a lunghezza intera. Come startup, dai un'occhiata ai seguenti esempi.

L'esempio seguente spiega come convertire una stringa in maiuscolo.

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

task upper << {
   String expString = 'TUTORIALS point'
   println "Original: " + expString
   println "Upper case: " + expString.toUpperCase()
}

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

C:\> gradle –q upper

Produzione:

Original: TUTORIALS point
Upper case: TUTORIALS POINT

L'esempio seguente spiega come stampare il valore di un parametro implicito ($ it) per 4 volte.

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

task count << {
   4.times { 
      print "$it " 
   }
}

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

$ gradle –q count

Produzione:

0 1 2 3

Il linguaggio Groovy offre molte funzionalità in quelle alcune importanti funzionalità sono discusse di seguito.

Metodi JDK Groovy

Groovy aggiunge molti metodi utili alle classi Java standard. Ad esempio, l'API Iterable di JDK implementa un fileeach() metodo che itera sugli elementi dell'interfaccia Iterable.

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

task groovyJDK << {
   String myName = "Marc";
   myName.each() { 
      println "${it}" 
   };
}

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 groovyJDK

Produzione:

M
a
r
c

Accessori per proprietà

È possibile accedere automaticamente ai metodi getter e setter appropriati di una particolare proprietà specificandone il riferimento.

Il frammento di codice seguente definisce la sintassi dei metodi getter e setter di una proprietà buildDir.

// Using a getter method
println project.buildDir
println getProject().getBuildDir()

// Using a setter method
project.buildDir = 'target'
getProject().setBuildDir('target')

Parentesi facoltative nelle chiamate ai metodi

Groovy contiene una caratteristica speciale nella chiamata dei metodi che è che le parentesi sono opzionali per la chiamata dei metodi. Questa funzione si applica anche allo scripting Gradle.

Dai un'occhiata alla seguente sintassi. Questo definisce una chiamata al metodosystemProperty di test oggetto.

test.systemProperty 'some.prop', 'value'
test.systemProperty('some.prop', 'value')

La chiusura come ultimo parametro del metodo

Gradle DSL utilizza chiusure in molti punti. Dove l'ultimo parametro di un metodo è una chiusura, è possibile inserire la chiusura dopo la chiamata al metodo.

Il seguente frammento definisce la sintassi che Closures usa come parametri del metodo repository ().

repositories {
   println "in a closure"
}
repositories() { 
   println "in a closure" 
}
repositories({ println "in a closure" })

Importazioni predefinite

Gradle aggiunge automaticamente una serie di istruzioni di importazione agli script Gradle. Il seguente elenco mostra i pacchetti di importazione predefiniti nello script Gradle.

import org.gradle.*
import org.gradle.api.*
import org.gradle.api.artifacts.*
import org.gradle.api.artifacts.cache.*
import org.gradle.api.artifacts.component.*
import org.gradle.api.artifacts.dsl.*
import org.gradle.api.artifacts.ivy.*
import org.gradle.api.artifacts.maven.*
import org.gradle.api.artifacts.query.*
import org.gradle.api.artifacts.repositories.*
import org.gradle.api.artifacts.result.*
import org.gradle.api.component.*
import org.gradle.api.credentials.*
import org.gradle.api.distribution.*
import org.gradle.api.distribution.plugins.*
import org.gradle.api.dsl.*
import org.gradle.api.execution.*
import org.gradle.api.file.*
import org.gradle.api.initialization.*
import org.gradle.api.initialization.dsl.*
import org.gradle.api.invocation.*
import org.gradle.api.java.archives.*
import org.gradle.api.logging.*
import org.gradle.api.plugins.*
import org.gradle.api.plugins.announce.*
import org.gradle.api.plugins.antlr.*
import org.gradle.api.plugins.buildcomparison.gradle.*
import org.gradle.api.plugins.jetty.*
import org.gradle.api.plugins.osgi.*
import org.gradle.api.plugins.quality.*
import org.gradle.api.plugins.scala.*
import org.gradle.api.plugins.sonar.*
import org.gradle.api.plugins.sonar.model.*
import org.gradle.api.publish.*
import org.gradle.api.publish.ivy.*
import org.gradle.api.publish.ivy.plugins.*
import org.gradle.api.publish.ivy.tasks.*
import org.gradle.api.publish.maven.*
import org.gradle.api.publish.maven.plugins.*
import org.gradle.api.publish.maven.tasks.*
import org.gradle.api.publish.plugins.*
import org.gradle.api.reporting.*
import org.gradle.api.reporting.components.*
import org.gradle.api.reporting.dependencies.*
import org.gradle.api.reporting.model.*
import org.gradle.api.reporting.plugins.*
import org.gradle.api.resources.*
import org.gradle.api.specs.*
import org.gradle.api.tasks.*
import org.gradle.api.tasks.ant.*
import org.gradle.api.tasks.application.*
import org.gradle.api.tasks.bundling.*
import org.gradle.api.tasks.compile.*
import org.gradle.api.tasks.diagnostics.*
import org.gradle.api.tasks.incremental.*
import org.gradle.api.tasks.javadoc.*
import org.gradle.api.tasks.scala.*
import org.gradle.api.tasks.testing.*
import org.gradle.api.tasks.testing.junit.*
import org.gradle.api.tasks.testing.testng.*
import org.gradle.api.tasks.util.*
import org.gradle.api.tasks.wrapper.*
import org.gradle.authentication.*
import org.gradle.authentication.http.*
import org.gradle.buildinit.plugins.*
import org.gradle.buildinit.tasks.*
import org.gradle.external.javadoc.*
import org.gradle.ide.cdt.*
import org.gradle.ide.cdt.tasks.*
import org.gradle.ide.visualstudio.*
import org.gradle.ide.visualstudio.plugins.*
import org.gradle.ide.visualstudio.tasks.*
import org.gradle.ivy.*
import org.gradle.jvm.*
import org.gradle.jvm.application.scripts.*
import org.gradle.jvm.application.tasks.*
import org.gradle.jvm.platform.*
import org.gradle.jvm.plugins.*
import org.gradle.jvm.tasks.*
import org.gradle.jvm.tasks.api.*
import org.gradle.jvm.test.*
import org.gradle.jvm.toolchain.*
import org.gradle.language.assembler.*
import org.gradle.language.assembler.plugins.*
import org.gradle.language.assembler.tasks.*
import org.gradle.language.base.*
import org.gradle.language.base.artifact.*
import org.gradle.language.base.plugins.*
import org.gradle.language.base.sources.*
import org.gradle.language.c.*
import org.gradle.language.c.plugins.*
import org.gradle.language.c.tasks.*
import org.gradle.language.coffeescript.*
import org.gradle.language.cpp.*
import org.gradle.language.cpp.plugins.*
import org.gradle.language.cpp.tasks.*
import org.gradle.language.java.*
import org.gradle.language.java.artifact.*
import org.gradle.language.java.plugins.*
import org.gradle.language.java.tasks.*
import org.gradle.language.javascript.*
import org.gradle.language.jvm.*
import org.gradle.language.jvm.plugins.*
import org.gradle.language.jvm.tasks.*
import org.gradle.language.nativeplatform.*
import org.gradle.language.nativeplatform.tasks.*
import org.gradle.language.objectivec.*
import org.gradle.language.objectivec.plugins.*
import org.gradle.language.objectivec.tasks.*
import org.gradle.language.objectivecpp.*
import org.gradle.language.objectivecpp.plugins.*
import org.gradle.language.objectivecpp.tasks.*
import org.gradle.language.rc.*
import org.gradle.language.rc.plugins.*
import org.gradle.language.rc.tasks.*
import org.gradle.language.routes.*
import org.gradle.language.scala.*
import org.gradle.language.scala.plugins.*
import org.gradle.language.scala.tasks.*
import org.gradle.language.scala.toolchain.*
import org.gradle.language.twirl.*
import org.gradle.maven.*
import org.gradle.model.*
import org.gradle.nativeplatform.*
import org.gradle.nativeplatform.platform.*
import org.gradle.nativeplatform.plugins.*
import org.gradle.nativeplatform.tasks.*
import org.gradle.nativeplatform.test.*
import org.gradle.nativeplatform.test.cunit.*
import org.gradle.nativeplatform.test.cunit.plugins.*
import org.gradle.nativeplatform.test.cunit.tasks.*
import org.gradle.nativeplatform.test.googletest.*
import org.gradle.nativeplatform.test.googletest.plugins.*
import org.gradle.nativeplatform.test.plugins.*
import org.gradle.nativeplatform.test.tasks.*
import org.gradle.nativeplatform.toolchain.*
import org.gradle.nativeplatform.toolchain.plugins.*
import org.gradle.platform.base.*
import org.gradle.platform.base.binary
import org.gradle.platform.base.component.*
import org.gradle.platform.base.plugins.*
import org.gradle.platform.base.test.*
import org.gradle.play.*
import org.gradle.play.distribution.*
import org.gradle.play.platform.*
import org.gradle.play.plugins.*
import org.gradle.play.tasks.*
import org.gradle.play.toolchain.*
import org.gradle.plugin.use.*
import org.gradle.plugins.ear.*
import org.gradle.plugins.ear.descriptor.*
import org.gradle.plugins.ide.api.*
import org.gradle.plugins.ide.eclipse.*
import org.gradle.plugins.ide.idea.*
import org.gradle.plugins.javascript.base.*
import org.gradle.plugins.javascript.coffeescript.*
import org.gradle.plugins.javascript.envjs.*
import org.gradle.plugins.javascript.envjs.browser.*
import org.gradle.plugins.javascript.envjs.http.*
import org.gradle.plugins.javascript.envjs.http.simple.*
import org.gradle.plugins.javascript.jshint.*
import org.gradle.plugins.javascript.rhino.*
import org.gradle.plugins.javascript.rhino.worker.*
import org.gradle.plugins.signing.*
import org.gradle.plugins.signing.signatory.*
import org.gradle.plugins.signing.signatory.pgp.*
import org.gradle.plugins.signing.type.*
import org.gradle.plugins.signing.type.pgp.*
import org.gradle.process.*
import org.gradle.sonar.runner.*
import org.gradle.sonar.runner.plugins.*
import org.gradle.sonar.runner.tasks.*
import org.gradle.testing.jacoco.plugins.*
import org.gradle.testing.jacoco.tasks.*
import org.gradle.testkit.runner.*
import org.gradle.util.*