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.*