Gradle - Skript erstellen
Gradle erstellt eine Skriptdatei für zwei Dinge. einer istprojects und ein anderer ist tasks. Jeder Gradle-Build repräsentiert ein oder mehrere Projekte. Ein Projekt stellt eine Bibliotheks-JAR oder eine Webanwendung dar, oder es kann eine ZIP-Datei darstellen, die aus den von anderen Projekten erstellten JARs zusammengestellt wurde. Mit einfachen Worten, ein Projekt besteht aus verschiedenen Aufgaben. Eine Aufgabe bedeutet eine Arbeit, die ein Build ausführt. Eine Aufgabe kann darin bestehen, einige Klassen zu kompilieren, eine JAR zu erstellen, Javadoc zu generieren oder einige Archive in einem Repository zu veröffentlichen.
Gradle verwendet Groovy language zum Schreiben von Skripten.
Build Script schreiben
Gradle bietet eine domänenspezifische Sprache (Domain Specific Language, DSL) zur Beschreibung von Builds. Dies verwendet die Groovy-Sprache, um die Beschreibung eines Builds zu vereinfachen. Jedes Build-Skript von Gradle wird mit UTF-8 codiert, offline gespeichert und als build.gradle bezeichnet.
build.gradle
Wir beschreiben Aufgaben und Projekte mithilfe eines Groovy-Skripts. Sie können einen Gradle-Build mit dem Befehl Gradle ausführen. Dieser Befehl sucht nach einer Datei mit dem Namenbuild.gradle. Schauen Sie sich das folgende Beispiel an, das ein kleines Skript darstellt, das gedruckt wirdtutorialspoint. Kopieren Sie das folgende Skript und speichern Sie es in einer Datei mit dem Namenbuild.gradle. Dieses Build-Skript definiert einen Aufgabennamen Hallo, mit dem die Tutorialspoint-Zeichenfolge gedruckt wird.
task hello {
doLast {
println 'tutorialspoint'
}
}
Führen Sie den folgenden Befehl an der Eingabeaufforderung aus. Es führt das obige Skript aus. Sie sollten dies ausführen, wo die Datei build.gradle gespeichert ist.
C:\> gradle –q hello
Ausgabe:
tutorialspoint
Wenn Sie der Meinung sind, dass die Aufgabe ähnlich wie das ANT-Ziel funktioniert, ist dies richtig. Die Gradle-Aufgabe entspricht dem ANT-Ziel.
Sie können diese Hallo-Aufgabe vereinfachen, indem Sie eine Verknüpfung angeben (die ein Symbol darstellt <<) zum doLastErklärung. Wenn Sie diese Verknüpfung zur obigen Aufgabe hinzufügenhello Es sieht wie im folgenden Skript aus.
task hello << {
println 'tutorialspoint'
}
Wie oben können Sie das obige Skript mit ausführen gradle –q hello Befehl.
Das Grade-Skript verwendete hauptsächlich zwei reale Objekte, eines ist Projektobjekt und eines ist Skriptobjekt.
Project Object- Jedes Skript beschreibt ein oder mehrere Projekte. Während der Ausführung konfiguriert dieses Skript das Projektobjekt. Sie können einige Methoden aufrufen und Eigenschaften in Ihrem Build-Skript verwenden, die an das Projektobjekt delegiert sind.
Script Object- Gradle hat Skriptcode in Klassen aufgenommen, die die Skriptschnittstelle implementieren und dann ausführen. Dies bedeutet, dass alle von der Skriptschnittstelle deklarierten Eigenschaften und Methoden in Ihrem Skript verfügbar sind.
Die folgende Tabelle definiert die Liste von standard project properties. Alle diese Eigenschaften sind in Ihrem Build-Skript verfügbar.
Sr. Nr. | Name | Art | Standardwert |
---|---|---|---|
1 | Projekt | Projekt | Die Projektinstanz |
2 | Name | String | Der Name des Projektverzeichnisses. |
3 | Pfad | String | Der absolute Weg des Projekts. |
4 | Beschreibung | String | Eine Beschreibung für das Projekt. |
5 | projectDir | Datei | Das Verzeichnis, das das Build-Skript enthält. |
6 | buildDir | Datei | projectDir / build |
7 | Gruppe | Objekt | Nicht spezifiziert |
8 | Ausführung | Objekt | Nicht spezifiziert |
9 | Ameise | AntBuilder | Eine AntBuilder-Instanz |
Groovy Basics
Gradle-Build-Skripte verwenden die Groovy-API in voller Länge. Schauen Sie sich als Startup die folgenden Beispiele an.
Im folgenden Beispiel wird das Konvertieren einer Zeichenfolge in Großbuchstaben erläutert.
Kopieren Sie den unten angegebenen Code und speichern Sie ihn in build.gradle Datei.
task upper << {
String expString = 'TUTORIALS point'
println "Original: " + expString
println "Upper case: " + expString.toUpperCase()
}
Führen Sie den folgenden Befehl an der Eingabeaufforderung aus. Es führt das oben angegebene Skript aus. Sie sollten dies ausführen, wo die Datei build.gradle gespeichert ist.
C:\> gradle –q upper
Ausgabe:
Original: TUTORIALS point
Upper case: TUTORIALS POINT
Im folgenden Beispiel wird erläutert, wie der Wert eines impliziten Parameters ($ it) viermal gedruckt wird.
Kopieren Sie den folgenden Code und speichern Sie ihn in build.gradle Datei.
task count << {
4.times {
print "$it "
}
}
Führen Sie den folgenden Befehl an der Eingabeaufforderung aus. Es führt das oben angegebene Skript aus. Sie sollten dies ausführen, wo die Datei build.gradle gespeichert ist.
$ gradle –q count
Ausgabe:
0 1 2 3
Die groovige Sprache bietet viele Funktionen, in denen einige wichtige Funktionen weiter unten erläutert werden.
Groovy JDK-Methoden
Groovy fügt den Standard-Java-Klassen viele nützliche Methoden hinzu. Beispielsweise implementiert die Iterable API von JDK eineeach() Methode, die über die Elemente der iterierbaren Schnittstelle iteriert.
Kopieren Sie den folgenden Code und speichern Sie ihn in build.gradle Datei.
task groovyJDK << {
String myName = "Marc";
myName.each() {
println "${it}"
};
}
Führen Sie den folgenden Befehl an der Eingabeaufforderung aus. Es führt das oben angegebene Skript aus. Sie sollten dies ausführen, wo die Datei build.gradle gespeichert wird.
C:\> gradle –q groovyJDK
Ausgabe:
M
a
r
c
Immobilien-Accessoren
Sie können automatisch auf die entsprechenden Getter- und Setter-Methoden einer bestimmten Eigenschaft zugreifen, indem Sie deren Referenz angeben.
Das folgende Snippet definiert die Syntax der Getter- und Setter-Methoden einer Eigenschaft buildDir.
// Using a getter method
println project.buildDir
println getProject().getBuildDir()
// Using a setter method
project.buildDir = 'target'
getProject().setBuildDir('target')
Optionale Klammern bei Methodenaufrufen
Groovy enthält eine spezielle Funktion beim Aufrufen von Methoden, dh die Klammern sind für den Methodenaufruf optional. Diese Funktion gilt auch für Gradle-Skripte.
Schauen Sie sich die folgende Syntax an. Das definiert einen MethodenaufrufsystemProperty von test Objekt.
test.systemProperty 'some.prop', 'value'
test.systemProperty('some.prop', 'value')
Abschluss als letzter Parameter der Methode
Gradle DSL verwendet an vielen Stellen Verschlüsse. Wenn der letzte Parameter einer Methode ein Abschluss ist, können Sie den Abschluss nach dem Methodenaufruf platzieren.
Das folgende Snippet definiert die Syntaxen, die Closures als Parameter für die Methode repositories () verwenden.
repositories {
println "in a closure"
}
repositories() {
println "in a closure"
}
repositories({ println "in a closure" })
Standardimporte
Gradle fügt den Gradle-Skripten automatisch eine Reihe von Importanweisungen hinzu. Die folgende Liste zeigt Ihnen die Standardimportpakete für das Gradle-Skript.
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.*