Gradle - Aufgaben

Das Gradle-Build-Skript beschreibt ein oder mehrere Projekte. Jedes Projekt besteht aus verschiedenen Aufgaben. Eine Aufgabe ist eine Arbeit, die ein Build ausführt. Die Aufgabe besteht möglicherweise darin, einige Klassen zu kompilieren, Klassendateien in einem separaten Zielordner zu speichern, JAR zu erstellen, Javadoc zu generieren oder einige Erfolge in einem Repository zu veröffentlichen.

In diesem Kapitel wird erläutert, was eine Aufgabe ist und wie eine Aufgabe generiert und ausgeführt wird.

Aufgaben definieren

Aufgabe ist ein Schlüsselwort, mit dem eine Aufgabe in einem Erstellungsskript definiert wird. Schauen Sie sich das folgende Beispiel an, das eine Aufgabe mit dem Namen darstellthello das druckt tutorialspoint. 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 dort ausführen, wo die Datei build.gradle gespeichert ist.

C:\> gradle –q hello

Ausgabe:

tutorialspoint

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

Sie können das obige Skript mit ausführen gradle –q hello Befehl.

Hier sind einige Variationen beim Definieren einer Aufgabe. Schauen Sie sich diese an. Das folgende Beispiel definiert eine Aufgabehello.

Kopieren Sie den folgenden Code und speichern Sie ihn in build.gradle Datei.

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

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 hello

Ausgabe:

tutorialspoint

Sie können auch Zeichenfolgen für die Aufgabennamen verwenden. Schauen Sie sich das gleiche Hallo-Beispiel an. Hier werden wir String als Aufgabe verwenden.

Kopieren Sie den folgenden Code und speichern Sie ihn in build.gradle Datei.

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

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 hello

Ausgabe:

tutorialspoint

Sie können auch eine alternative Syntax zum Definieren einer Aufgabe verwenden. Das ist die Methode create () zum Definieren einer Aufgabe. Schauen Sie sich das unten stehende Hallo-Beispiel an.

Kopieren Sie den unten angegebenen Code und speichern Sie ihn in build.gradle Datei.

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

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 hello

Ausgabe:

tutorialspoint

Aufgaben suchen

Wenn Sie Aufgaben suchen möchten, die Sie in der Build-Datei definiert haben, müssen Sie die entsprechenden Standard-Projekteigenschaften verwenden. Das bedeutet, dass jede Aufgabe als Eigenschaft des Projekts verfügbar ist und der Aufgabenname als Eigenschaftsname verwendet wird.

Sehen Sie sich den folgenden Code an, der den Zugriff auf Aufgaben als Eigenschaften ermöglicht.

Kopieren Sie den unten angegebenen Code und speichern Sie ihn in build.gradle Datei.

task hello

println hello.name
println project.hello.name

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 hello

Ausgabe:

hello
hello

Sie können alle Eigenschaften auch über die Aufgabensammlung verwenden.

Kopieren Sie den folgenden Code und speichern Sie ihn in build.gradle Datei.

task hello

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

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 hello

Ausgabe:

hello
hello

Sie können auch über die Aufgaben auf den Pfad der Aufgabe zugreifen. Dazu können Sie die Methode getByPath () mit einem Aufgabennamen, einem relativen Pfad oder einem absoluten Pfad aufrufen.

Kopieren Sie den unten angegebenen Code und speichern Sie ihn in build.gradle Datei.

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

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 hello

Ausgabe:

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

Hinzufügen von Abhängigkeiten zu Aufgaben

Sie können festlegen, dass eine Aufgabe von einer anderen Aufgabe abhängig ist. Wenn also eine Aufgabe erledigt ist, wird nur eine andere Aufgabe gestartet. Jede Aufgabe wird mit dem Aufgabennamen unterschieden. Die Sammlung von Aufgabennamen wird durch ihre Aufgabensammlung bezeichnet. Um auf eine Aufgabe in einem anderen Projekt zu verweisen, sollten Sie den Pfad des Projekts als Präfix für den jeweiligen Aufgabennamen verwenden.

Das folgende Beispiel fügt eine Abhängigkeit von taskX zu taskY hinzu.

Kopieren Sie den unten angegebenen Code und speichern Sie ihn in build.gradleDatei. Schauen Sie sich den folgenden Code an.

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

Führen Sie den folgenden Befehl an der Eingabeaufforderung aus. Es führt das oben angegebene Skript aus. Sie sollten dies ausführen, wo diebuild.gradle Dateispeicher.

C:\> gradle –q taskY

Ausgabe:

taskX
taskY

Im obigen Beispiel wird die Abhängigkeit von der Aufgabe mithilfe ihrer Namen hinzugefügt. Es gibt eine andere Möglichkeit, eine Aufgabenabhängigkeit zu erreichen, indem Sie die Abhängigkeit mithilfe eines Aufgabenobjekts definieren.

Nehmen wir das gleiche Beispiel für die Abhängigkeit von taskY von taskX, verwenden jedoch Taskobjekte anstelle von Taskreferenznamen.

Kopieren Sie den folgenden Code und speichern Sie ihn in build.gradle Datei.

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

Führen Sie den folgenden Befehl an der Eingabeaufforderung aus. Sie sollten dies dort ausführen, wo die Datei build.gradle gespeichert ist.

C:\> gradle –q taskY

Ausgabe:

taskX
taskY

Im obigen Beispiel wird die Abhängigkeit von der Aufgabe mithilfe ihrer Namen hinzugefügt. Es gibt eine andere Möglichkeit, eine Aufgabenabhängigkeit zu erreichen, nämlich die Definition der Abhängigkeit mithilfe eines Aufgabenobjekts.

Hier nehmen wir das gleiche Beispiel, dass taskY von taskX abhängt, aber wir verwenden Taskobjekte anstelle von Taskreferenznamen. Schau es dir an.

Kopieren Sie den unten angegebenen Code und speichern Sie ihn in build.gradleDatei. Schauen Sie sich den folgenden Code an.

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

Führen Sie den folgenden Befehl an der Eingabeaufforderung aus. Es führt das oben angegebene Skript aus. Sie sollten dies ausführen, wo diebuild.gradle Dateispeicher.

C:\> gradle –q taskX

Ausgabe:

lib1
lib2
taskX

Hinzufügen einer Beschreibung zu einer Aufgabe

Sie können Ihrer Aufgabe eine Beschreibung hinzufügen. Diese Beschreibung wird bei der Ausführung angezeigtGradle tasks. Dies ist mit dem Schlüsselwort description möglich.

Kopieren Sie den folgenden Code und speichern Sie ihn in build.gradleDatei. Schauen Sie sich den folgenden Code an.

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

Führen Sie den folgenden Befehl an der Eingabeaufforderung aus. Sie sollten dies dort ausführen, wo die Datei build.gradle gespeichert ist.

C:\> gradle –q copy

Wenn der Befehl erfolgreich ausgeführt wird, erhalten Sie die folgende Ausgabe.

description applied

Aufgaben überspringen

Das Überspringen von Aufgaben kann durch Übergeben eines Prädikatabschlusses erfolgen. Dies ist nur möglich, wenn die Methode einer Aufgabe oder ein Abschluss aStopExecutionException bevor die eigentliche Arbeit einer Aufgabe ausgeführt wird.

Kopieren Sie den folgenden Code und speichern Sie ihn in build.gradle Datei.

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()
   }
}

Führen Sie den folgenden Befehl an der Eingabeaufforderung aus. Sie sollten dies dort ausführen, wo die Datei build.gradle gespeichert ist.

C:\> gradle –q eclipse

Aufgabenstruktur

Gradle hat verschiedene Phasen bei der Arbeit mit Aufgaben. Zunächst gibt es eine Konfigurationsphase, in der der Code ausgeführt wird, der direkt beim Schließen einer Aufgabe angegeben wird. Der Konfigurationsblock wird für jede verfügbare Aufgabe ausgeführt und nicht nur für die Aufgaben, die später tatsächlich ausgeführt werden.

Nach der Konfigurationsphase führt die Ausführungsphase den Code innerhalb der aus doFirst oder doLast Schließung der Aufgaben, die tatsächlich ausgeführt werden.