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.