Gradle - Tugas
Skrip build Gradle menjelaskan tentang satu atau beberapa Project. Setiap proyek terdiri dari tugas yang berbeda. Tugas adalah bagian dari pekerjaan yang dilakukan oleh build. Tugas tersebut mungkin mengompilasi beberapa kelas, menyimpan file kelas ke dalam folder target terpisah, membuat JAR, membuat Javadoc, atau menerbitkan beberapa pencapaian ke repositori.
Bab ini menjelaskan tentang apa itu tugas dan bagaimana menghasilkan dan melaksanakan tugas.
Mendefinisikan Tugas
Tugas adalah kata kunci yang digunakan untuk mendefinisikan tugas ke dalam skrip build. Perhatikan contoh berikut yang mewakili tugas bernamahello yang mencetak tutorialspoint. Salin dan simpan skrip berikut ke dalam file bernamabuild.gradle. Skrip build ini mendefinisikan nama tugas hello yang digunakan untuk mencetak string tutorialspoint.
task hello {
doLast {
println 'tutorialspoint'
}
}
Jalankan perintah berikut di prompt perintah. Ini mengeksekusi skrip di atas. Anda harus menjalankan ini di mana file build.gradle disimpan.
C:\> gradle –q hello
Keluaran:
tutorialspoint
Anda dapat menyederhanakan tugas hello ini dengan menentukan pintasan (mewakili simbol <<) ke doLastpernyataan. Jika Anda menambahkan pintasan ini ke tugas di atashello itu akan terlihat seperti skrip berikut.
task hello << {
println 'tutorialspoint'
}
Anda dapat menjalankan skrip di atas menggunakan gradle –q hello perintah.
Berikut beberapa variasi dalam mendefinisikan tugas, lihatlah. Contoh berikut mendefinisikan tugashello.
Salin dan simpan kode berikut ke build.gradle mengajukan.
task (hello) << {
println "tutorialspoint"
}
Jalankan perintah berikut di prompt perintah. Ini mengeksekusi skrip yang diberikan di atas. Anda harus menjalankan ini, di mana file build.gradle disimpan.
C:\> gradle –q hello
Keluaran:
tutorialspoint
Anda juga dapat menggunakan string untuk nama tugas. Lihatlah contoh halo yang sama. Di sini kita akan menggunakan String sebagai tugas.
Salin dan simpan kode berikut ke build.gradle mengajukan.
task('hello') << {
println "tutorialspoint"
}
Jalankan perintah berikut di prompt perintah. Ini mengeksekusi skrip yang diberikan di atas. Anda harus menjalankan ini, di mana file build.gradle disimpan.
C:\> gradle –q hello
Keluaran:
tutorialspoint
Anda juga dapat menggunakan sintaks alternatif untuk menentukan tugas. Itu menggunakan metode create () untuk mendefinisikan tugas. Lihatlah contoh halo yang sama yang diberikan di bawah ini.
Salin dan simpan kode yang diberikan di bawah ini ke build.gradle mengajukan.
tasks.create(name: 'hello') << {
println "tutorialspoint"
}
Jalankan perintah berikut di prompt perintah. Ini mengeksekusi skrip yang diberikan di atas. Anda harus menjalankan ini, di mana file build.gradle disimpan.
C:\> gradle –q hello
Keluaran:
tutorialspoint
Menemukan Tugas
Jika Anda ingin menemukan tugas yang Anda tentukan di file build, Anda harus menggunakan properti proyek standar masing-masing. Itu berarti setiap tugas tersedia sebagai properti proyek, menggunakan nama tugas sebagai nama properti.
Perhatikan kode berikut yang mengakses tugas sebagai properti.
Salin dan simpan kode yang diberikan di bawah ini ke build.gradle mengajukan.
task hello
println hello.name
println project.hello.name
Jalankan perintah berikut di prompt perintah. Ini mengeksekusi skrip yang diberikan di atas. Anda harus menjalankan ini, di mana file build.gradle disimpan.
C:\> gradle –q hello
Keluaran:
hello
hello
Anda juga dapat menggunakan semua properti melalui kumpulan tugas.
Salin dan simpan kode berikut ke build.gradle mengajukan.
task hello
println tasks.hello.name
println tasks['hello'].name
Jalankan perintah berikut di prompt perintah. Ini mengeksekusi skrip yang diberikan di atas. Anda harus menjalankan ini, di mana file build.gradle disimpan.
C:\> gradle –q hello
Keluaran:
hello
hello
Anda juga dapat mengakses jalur tugas menggunakan tugas. Untuk ini, Anda bisa memanggil metode getByPath () dengan nama tugas, atau jalur relatif, atau jalur absolut.
Salin dan simpan kode yang diberikan di bawah ini ke build.gradle mengajukan.
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
Jalankan perintah berikut di prompt perintah. Ini mengeksekusi skrip yang diberikan di atas. Anda harus menjalankan ini, di mana file build.gradle disimpan.
C:\> gradle –q hello
Keluaran:
:hello
:hello
:projectA:hello
:projectA:hello
Menambahkan Dependensi ke Tugas
Anda dapat membuat suatu tugas bergantung pada tugas lain yang artinya ketika satu tugas selesai maka hanya tugas lain yang akan dimulai. Setiap tugas dibedakan dengan nama tugas. Kumpulan nama tugas dirujuk oleh kumpulan tugasnya. Untuk merujuk ke tugas di proyek lain, Anda harus menggunakan jalur proyek sebagai awalan ke nama tugas masing-masing.
Contoh berikut yang menambahkan ketergantungan dari taskX ke taskY.
Salin dan simpan kode yang diberikan di bawah ini ke build.gradlemengajukan. Perhatikan kode berikut.
task taskX << {
println 'taskX'
}
task taskY(dependsOn: 'taskX') << {
println "taskY"
}
Jalankan perintah berikut di prompt perintah. Ini mengeksekusi skrip yang diberikan di atas. Anda harus menjalankan ini, di manabuild.gradle penyimpanan file.
C:\> gradle –q taskY
Keluaran:
taskX
taskY
Contoh di atas menambahkan ketergantungan pada tugas dengan menggunakan namanya. Ada cara lain untuk mencapai ketergantungan tugas yang mendefinisikan ketergantungan menggunakan objek Tugas.
Mari kita ambil contoh yang sama dari taskY yang bergantung pada taskX tetapi kita menggunakan objek tugas daripada nama referensi tugas.
Salin dan simpan kode berikut ke build.gradle mengajukan.
task taskY << {
println 'taskY'
}
task taskX << {
println 'taskX'
}
taskY.dependsOn taskX
Jalankan perintah berikut di prompt perintah. Anda harus menjalankan ini di mana file build.gradle disimpan.
C:\> gradle –q taskY
Keluaran:
taskX
taskY
Contoh di atas menambahkan ketergantungan pada tugas dengan menggunakan namanya. Ada cara lain untuk mencapai ketergantungan tugas yaitu mendefinisikan ketergantungan menggunakan objek Tugas.
Di sini kita mengambil contoh yang sama bahwa taskY bergantung pada taskX tetapi kita menggunakan objek tugas daripada nama referensi tugas. Coba lihat.
Salin dan simpan kode yang diberikan di bawah ini ke build.gradlemengajukan. Perhatikan kode berikut.
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'
}
Jalankan perintah berikut di prompt perintah. Ini mengeksekusi skrip yang diberikan di atas. Anda harus menjalankan ini, di manabuild.gradle penyimpanan file.
C:\> gradle –q taskX
Keluaran:
lib1
lib2
taskX
Menambahkan Deskripsi ke Tugas
Anda dapat menambahkan deskripsi ke tugas Anda. Deskripsi ini ditampilkan saat menjalankanGradle tasks. Ini dimungkinkan dengan menggunakan kata kunci deskripsi.
Salin dan simpan kode berikut ke build.gradlemengajukan. Perhatikan kode berikut.
task copy(type: Copy) {
description 'Copies the resource directory to the target directory.'
from 'resources'
into 'target'
include('**/*.txt', '**/*.xml', '**/*.properties')
println("description applied")
}
Jalankan perintah berikut di prompt perintah. Anda harus menjalankan ini di mana file build.gradle disimpan.
C:\> gradle –q copy
Jika perintah berhasil dijalankan, Anda akan mendapatkan output berikut.
description applied
Melewati Tugas
Melewati tugas dapat dilakukan dengan melewati penutupan predikat. Ini hanya mungkin jika metode tugas atau penutupan melemparStopExecutionException sebelum pekerjaan sebenarnya dari suatu tugas dijalankan.
Salin dan simpan kode berikut ke build.gradle mengajukan.
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()
}
}
Jalankan perintah berikut di prompt perintah. Anda harus menjalankan ini di mana file build.gradle disimpan.
C:\> gradle –q eclipse
Struktur Tugas
Gradle memiliki fase yang berbeda, saat mengerjakan tugas. Pertama-tama, ada fase konfigurasi, di mana kode, yang ditentukan secara langsung dalam penutupan tugas, dijalankan. Blok konfigurasi dijalankan untuk setiap tugas yang tersedia dan tidak hanya untuk tugas-tugas yang nantinya benar-benar dijalankan.
Setelah fase konfigurasi, fase eksekusi menjalankan kode di dalam file doFirst atau doLast penutupan tugas-tugas tersebut, yang sebenarnya dijalankan.