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