Gradle - zadania
Skrypt kompilacji Gradle opisuje jeden lub więcej projektów. Każdy projekt składa się z różnych zadań. Zadanie to praca wykonywana przez kompilację. Zadanie może polegać na kompilowaniu niektórych klas, przechowywaniu plików klas w oddzielnym folderze docelowym, tworzeniu JAR, generowaniu Javadoc lub publikowaniu niektórych osiągnięć w repozytoriach.
W tym rozdziale wyjaśniono, czym jest zadanie oraz jak je wygenerować i wykonać.
Definiowanie zadań
Zadanie to słowo kluczowe, które służy do definiowania zadania w skrypcie kompilacji. Spójrz na poniższy przykład, który przedstawia zadanie o nazwiehello które drukuje tutorialspoint. Skopiuj i zapisz następujący skrypt w pliku o nazwiebuild.gradle. Ten skrypt kompilacji definiuje nazwę zadania hello, która jest używana do drukowania ciągu tutorialspoint.
task hello {
doLast {
println 'tutorialspoint'
}
}
Wykonaj następujące polecenie w wierszu polecenia. Wykonuje powyższy skrypt. Należy to wykonać tam, gdzie przechowywany jest plik build.gradle.
C:\> gradle –q hello
Wynik:
tutorialspoint
Możesz uprościć to zadanie Hello, określając skrót (reprezentujący symbol <<) do doLastkomunikat. Jeśli dodasz ten skrót do powyższego zadaniahello będzie wyglądać jak poniższy skrypt.
task hello << {
println 'tutorialspoint'
}
Możesz uruchomić powyższy skrypt za pomocą gradle –q hello Komenda.
Oto kilka odmian definiowania zadania, spójrz na to. Poniższy przykład definiuje zadaniehello.
Skopiuj i zapisz następujący kod w build.gradle plik.
task (hello) << {
println "tutorialspoint"
}
Wykonaj następujące polecenie w wierszu polecenia. Wykonuje powyższy skrypt. Powinieneś to wykonać, gdy przechowuje plik build.gradle.
C:\> gradle –q hello
Wynik:
tutorialspoint
Możesz również użyć ciągów znaków w nazwach zadań. Spójrz na ten sam przykład powitania. Tutaj użyjemy String jako zadania.
Skopiuj i zapisz następujący kod w build.gradle plik.
task('hello') << {
println "tutorialspoint"
}
Wykonaj następujące polecenie w wierszu polecenia. Wykonuje powyższy skrypt. Powinieneś to wykonać, gdy przechowuje plik build.gradle.
C:\> gradle –q hello
Wynik:
tutorialspoint
Możesz także użyć alternatywnej składni do zdefiniowania zadania. Oznacza to użycie metody create () do zdefiniowania zadania. Spójrz na ten sam przykład powitania podany poniżej.
Skopiuj i zapisz poniższy kod do build.gradle plik.
tasks.create(name: 'hello') << {
println "tutorialspoint"
}
Wykonaj następujące polecenie w wierszu polecenia. Wykonuje powyższy skrypt. Powinieneś to wykonać, gdy przechowuje plik build.gradle.
C:\> gradle –q hello
Wynik:
tutorialspoint
Lokalizowanie zadań
Jeśli chcesz zlokalizować zadania zdefiniowane w pliku kompilacji, musisz użyć odpowiednich standardowych właściwości projektu. Oznacza to, że każde zadanie jest dostępne jako właściwość projektu, przy użyciu nazwy zadania jako nazwy właściwości.
Przyjrzyj się poniższemu kodowi, który uzyskuje dostęp do zadań jako właściwości.
Skopiuj i zapisz poniższy kod do build.gradle plik.
task hello
println hello.name
println project.hello.name
Wykonaj następujące polecenie w wierszu polecenia. Wykonuje powyższy skrypt. Powinieneś to wykonać, gdy przechowuje plik build.gradle.
C:\> gradle –q hello
Wynik:
hello
hello
Możesz również użyć wszystkich właściwości za pośrednictwem kolekcji zadań.
Skopiuj i zapisz następujący kod w build.gradle plik.
task hello
println tasks.hello.name
println tasks['hello'].name
Wykonaj następujące polecenie w wierszu polecenia. Wykonuje powyższy skrypt. Powinieneś to wykonać, gdy przechowuje plik build.gradle.
C:\> gradle –q hello
Wynik:
hello
hello
Możesz również uzyskać dostęp do ścieżki zadania za pomocą zadań. W tym celu możesz wywołać metodę getByPath () z nazwą zadania, ścieżką względną lub ścieżką bezwzględną.
Skopiuj i zapisz poniższy kod do build.gradle plik.
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
Wykonaj następujące polecenie w wierszu polecenia. Wykonuje powyższy skrypt. Powinieneś to wykonać, gdy przechowuje plik build.gradle.
C:\> gradle –q hello
Wynik:
:hello
:hello
:projectA:hello
:projectA:hello
Dodawanie zależności do zadań
Możesz uzależnić zadanie od innego zadania, co oznacza, że po wykonaniu jednego zadania rozpocznie się tylko inne zadanie. Każde zadanie jest rozróżniane nazwą zadania. Do zbioru nazw zadań odwołuje się jego kolekcja zadań. Aby odwołać się do zadania w innym projekcie, należy użyć ścieżki projektu jako przedrostka do odpowiedniej nazwy zadania.
Poniższy przykład, który dodaje zależność od taskX do taskY.
Skopiuj i zapisz poniższy kod do build.gradleplik. Spójrz na poniższy kod.
task taskX << {
println 'taskX'
}
task taskY(dependsOn: 'taskX') << {
println "taskY"
}
Wykonaj następujące polecenie w wierszu polecenia. Wykonuje powyższy skrypt. Powinieneś to wykonać, gdziebuild.gradle magazyny plików.
C:\> gradle –q taskY
Wynik:
taskX
taskY
Powyższy przykład to dodanie zależności od zadania przy użyciu jego nazw. Istnieje inny sposób osiągnięcia zależności między zadaniami, który polega na zdefiniowaniu zależności przy użyciu obiektu Task.
Weźmy ten sam przykład zależności taskY od taskX, ale używamy obiektów zadań zamiast nazw odwołań do zadań.
Skopiuj i zapisz następujący kod w build.gradle plik.
task taskY << {
println 'taskY'
}
task taskX << {
println 'taskX'
}
taskY.dependsOn taskX
Wykonaj następujące polecenie w wierszu polecenia. Należy to wykonać tam, gdzie przechowywany jest plik build.gradle.
C:\> gradle –q taskY
Wynik:
taskX
taskY
Powyższy przykład to dodanie zależności od zadania przy użyciu jego nazw. Istnieje inny sposób osiągnięcia zależności między zadaniami, który polega na zdefiniowaniu zależności przy użyciu obiektu Task.
Tutaj bierzemy ten sam przykład, w którym taskY jest zależny od taskX, ale używamy obiektów zadań zamiast nazw odniesień do zadań. Przyjrzyj się temu.
Skopiuj i zapisz poniższy kod do build.gradleplik. Spójrz na poniższy kod.
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'
}
Wykonaj następujące polecenie w wierszu polecenia. Wykonuje powyższy skrypt. Powinieneś to wykonać, gdziebuild.gradle magazyny plików.
C:\> gradle –q taskX
Wynik:
lib1
lib2
taskX
Dodawanie opisu do zadania
Możesz dodać opis do swojego zadania. Ten opis jest wyświetlany podczas wykonywaniaGradle tasks. Jest to możliwe dzięki użyciu słowa kluczowego description.
Skopiuj i zapisz następujący kod w build.gradleplik. Spójrz na poniższy kod.
task copy(type: Copy) {
description 'Copies the resource directory to the target directory.'
from 'resources'
into 'target'
include('**/*.txt', '**/*.xml', '**/*.properties')
println("description applied")
}
Wykonaj następujące polecenie w wierszu polecenia. Należy to wykonać tam, gdzie przechowywany jest plik build.gradle.
C:\> gradle –q copy
Jeśli polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
description applied
Pomijanie zadań
Pomijanie zadań można wykonać, przekazując zamknięcie predykatu. Jest to możliwe tylko wtedy, gdy metoda zadania lub zakończenie rzucaStopExecutionException przed faktyczną pracą zadania.
Skopiuj i zapisz następujący kod w build.gradle plik.
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()
}
}
Wykonaj następujące polecenie w wierszu polecenia. Należy to wykonać tam, gdzie przechowywany jest plik build.gradle.
C:\> gradle –q eclipse
Struktura zadań
Podczas pracy z zadaniami Gradle ma różne fazy. Przede wszystkim jest faza konfiguracji, w której wykonywany jest kod, który jest określony bezpośrednio w zamknięciu zadania. Blok konfiguracyjny jest wykonywany dla każdego dostępnego zadania, a nie tylko dla zadań, które są później faktycznie wykonywane.
Po fazie konfiguracji faza wykonywania uruchamia kod wewnątrz doFirst lub doLast zamknięcia tych zadań, które są faktycznie wykonywane.