JavaRush /Java Blog /Random-ID /Pengenalan singkat tentang Gradle
Viacheslav
Level 3

Pengenalan singkat tentang Gradle

Dipublikasikan di grup Random-ID

Perkenalan

Topik ulasan ini adalah sistem build otomatis Gradle. Dalam bahasa Inggris, sistem build disebut Build Tools . Pengenalan singkat tentang Gradle - 1Mengapa ini perlu? Membangun proyek secara manual di Java adalah proses yang memakan banyak tenaga. Penting untuk menunjukkan dengan benar perpustakaan dan kerangka kerja yang dibutuhkan proyek dan yang menjadi sandaran proyek. Di sini Anda dapat membaca artikel bagus tentang Habré: “ Bekerja dengan Java pada baris perintah .” Cepat atau lambat Anda akan mulai membuat beberapa skrip untuk mengotomatiskan proses ini. Sekarang bayangkan semua pengembang di seluruh dunia melakukan ini dan semua orang menulis lagi apa yang telah ditulis seseorang untuk proyek mereka. Dan kemudian muncul sistem perakitan proyek yang mengotomatiskan proses ini. Selain itu, di satu sisi, mereka memungkinkan Anda menyusun proyek sesuai keinginan Anda, di sisi lain, mereka memberi Anda alat yang kurang lebih terstandarisasi. Alternatif untuk Gradle adalah sistem pembangunan otomatis Maven. Kedua sistem perakitan ini di satu sisi berbeda, namun di sisi lain memiliki sejumlah kesamaan. Ada materi tentang topik ini di situs web Gradle: " Migrasi dari Maven ke Gradle ". Seperti yang dinyatakan dalam tutorial ini, Gradle dan Maven memiliki perspektif berbeda tentang cara membangun sebuah proyek. Gradle didasarkan pada grafik tugas, yang dapat bergantung satu sama lain. Tugas melakukan beberapa jenis pekerjaan. Maven menggunakan model fase-fase tertentu, yang di dalamnya terdapat “tujuan” tertentu. Tujuan-tujuan ini adalah tempat beberapa pekerjaan dilakukan. Namun, dengan pendekatan yang berbeda ini, kedua sistem pembangunan mengikuti konvensi yang sama dan manajemen ketergantungan serupa. Untuk mulai menggunakan Gradle Anda perlu mengunduhnya. Di Google atau Yandex kita memasukkan "Gradle Build Tool" dan pada hasil pertama kita melihat situs resminya: https://gradle.org . Di halaman utama Gradle terdapat link dengan teks "Docs", yang mengarah ke dokumentasi Gradle . Pertama, kita perlu menginstal (Instal) Gradle, jadi kami tertarik pada bagian " Menginstal Gradle " pada dokumentasi. Ada banyak metode instalasi, termasuk metode “kuno”, yaitu. secara manual (“ Menginstal secara manual ”). Menurut petunjuknya, unduh file bertipe “ binary-only ”, yang akan memiliki nama seperti gradle-5.1.1-bin.zip. Selanjutnya, buka paket arsip dan konfigurasikan variabel lingkungan PATH sesuai dengan instruksi. Hal utama adalah setelah menjalankan instruksi, perintah gradle -vmenunjukkan versi Gradle yang diinstal. Mungkin ada masalah ketika menentukan lokasi, sistem akan menemukan Gradle tidak di tempat yang Anda inginkan. Oleh karena itu, di Windows Anda dapat melakukannya (di *nix ada analognya): for %i in (gradle.bat) do @echo. %~$PATH:i Sekarang, mungkin, kita bisa mulai berkenalan.
Pengenalan singkat tentang Gradle - 2

Menginisialisasi proyek Gradle

Saya ingin segera mencatat bahwa Gradle adalah tentang melakukan tugas yang disebut tugas (saya akan menyebutnya tugas). Tugas disediakan oleh berbagai plugin . Saya menyarankan Anda untuk membaca lebih lanjut tentang plugin di dokumentasi resmi: " Menggunakan Plugin Gradle ". Ada satu set "Plugin Inti" yang selalu tersedia saat Gradle diinstal. Ada berbagai kategori plugin ini, tetapi kami tertarik pada kategori " Utilitas ". Set ini mencakup plugin " Build Init Plugin ", yang menyediakan tugas untuk menginisialisasi proyek Gradle. Kami tertarik untuk membuat jenis proyek: " aplikasi Java ". Mari kita jalankan tugas Gradle: gradle init --type java-application Mari kita jawab beberapa pertanyaan selama ini, misalnya, kita ingin menggunakan Groovy DSL (bahasa deskripsi tugas standar untuk Gradle) dan kerangka pengujian JUnit (kita akan membicarakannya di ulasan lain). Setelah pembuatan kami akan menerima kumpulan file berikut:
Pengenalan singkat tentang Gradle - 3
Pertama, setelah inisialisasi kami menerima pembungkus khusus yang telah dikonfigurasi sebelumnya untuk versi Gradle kami - ini adalah skrip khusus. Saya menyarankan Anda untuk membaca lebih lanjut tentang hal ini di dokumentasi resmi - " The Gradle Wrapper ". Kedua, kita melihat Gradle Build Script - file build.gradle. Ini adalah file utama, yang menjelaskan perpustakaan dan kerangka kerja mana yang digunakan proyek kita, plugin mana yang perlu dihubungkan ke proyek, dan menjelaskan berbagai tugas. Saya menyarankan Anda untuk membaca lebih lanjut tentang file ini di dokumentasi resmi: " Build Script Basics ".
Pengenalan singkat tentang Gradle - 4

Plugin dan Tugas

Jika kita sekarang melihat isi dari Build Script, kita akan melihat bagian plugins:

plugins {
    id 'java'
    id 'application'
}
Ini adalah plugin yang sama yang kita bicarakan sebelumnya. Dan jika ada plugin, maka ada tugas yang sekarang tersedia untuk kita. Kita dapat menjalankan perintah tugas gradle dan melihat apa yang sekarang dapat kita lakukan dengan proyek tersebut:
Pengenalan singkat tentang Gradle - 5
Misalnya, dengan mengeksekusi gradle runkita akan meluncurkan kelas utama aplikasi java kita:
Pengenalan singkat tentang Gradle - 6
Seperti yang bisa kita lihat, hal yang sama tertulis di bawah ini, 2 actionable tasks: 1 executed, 1 up-to-date apa maksudnya? Artinya total 2 tugas selesai: Apalagi 1 benar-benar selesai, dan satu tidak dijalankan, karena... itu mutakhir, yaitu keadaan terkini dan tidak ada yang dilakukan. Kita dapat menjalankan apa yang disebut "Dry Run": gradle run -m Mari kita jalankan perintah ini, kita akan melihat tugas apa yang akan dijalankan untuk menjalankan tugas run:
Pengenalan singkat tentang Gradle - 7
Seperti yang bisa kita lihat, total 4 tugas telah diselesaikan: sebelum dijalankan, ia mengeksekusi kelas tugas ketergantungan. Kelas itu sendiri memiliki 2 dependensi dan oleh karena itu ia juga mengeksekusi kompilasiJava dan processResources. Saat kita melakukan suatu tugas, kita dapat melakukannya sambil melihat tingkat log tertentu (tingkat logging menentukan seberapa penting pesan yang ingin kita lihat). Misalnya saja yang bisa kita lakukan gradle run -i. Ini juga akan menampilkan pesan informasi seperti:

Task :classes UP-TO-DATE
Skipping task ':classes' as it has no actions.
Untuk informasi lebih lanjut tentang login di Gradle, saya menyarankan Anda untuk merujuk ke dokumentasi resmi: " Gradle Logging ". Seperti yang bisa kita lihat, tugas kelas dilewati karena UP-TO-DATE , yaitu status saat ini, tidak ada yang perlu dilakukan, jadi tidak ada tindakan. Hal ini karena secara default Gradle memiliki " Pemeriksaan terkini " atau yang disebut build inkremental. Anda dapat membaca selengkapnya tentang mekanisme ini di dokumentasi Gradle: " Pemeriksaan terkini (AKA Inkremental Build) ". Namun mekanisme ini dapat dinonaktifkan dengan menjalankan tugas yang menentukan flag --rerun-tasks. Misalnya, gradle run --rerun-tasks. Kemudian kita akan melihat: 2 tugas yang dapat ditindaklanjuti: 2 dieksekusi Seperti yang Anda lihat, jumlah tugas yang dieksekusi hanya memperhitungkan grafik tingkat pertama, yaitu, tugas yang dijalankan itu sendiri dan tugas-tugas yang bergantung langsung padanya, yaitu , kelas. Tugas yang menjadi sandaran kelas tidak dihitung di sini (meskipun tugas tersebut dijalankan saat tugas kelas dijalankan). Anda juga harus membaca tentang tugas:
Pengenalan singkat tentang Gradle - 8

Ketergantungan

Salah satu tugas utama dari setiap sistem pembangunan adalah mengelola dependensi, yaitu perpustakaan/kerangka kerja mana yang dibutuhkan proyek kita. Sistem pembangunan harus memastikan bahwa mereka tersedia pada waktu yang tepat dan merakit artefak akhir aplikasi kita dengan cara yang benar. Secara default, setelah gradle init untuk aplikasi Java kita akan melihat konten berikut dalam skrip build:

dependencies {
    implementation 'com.google.guava:guava:26.0-jre'
    testImplementation 'junit:junit:4.12'
}
Di sini jelas sekali apa yang kita hubungkan. Namun tanpa pemahaman, tidak jelas apa itu implementasi dan implementasi pengujian? Di sini kita perlu kembali ke dokumentasi Gradle, karena dokumentasi Gradle ditulis dengan baik. Ini disebut " Mengelola Konfigurasi Ketergantungan ". Sebagaimana dinyatakan dalam dokumentasi, setiap ketergantungan dideklarasikan dengan cakupan tertentu - area di mana ketergantungan ini akan tersedia. Cakupan ini ditentukan oleh beberapa konfigurasi, yang masing-masing memiliki nama unik. Menarik juga bahwa banyak plugin Gradle menambahkan konfigurasi yang telah ditentukan sebelumnya. Untuk mengetahui konfigurasi apa yang kita miliki, kita dapat menjalankan: gradle --console plain dependencies Dengan cara ini kita akan melihat daftar semua konfigurasi yang tersedia dan ketergantungannya. Kita dapat memfilter daftar ini sehingga kita hanya melihat konfigurasi yang tersedia saja: gradle --console plain dependencies | find " - " Bagaimana kita tahu apa yang harus digunakan? Anda harus melakukan sedikit membaca di sini. Karena Kami menggunakan plugin "Java", jadi mari kita mulai dengan dokumentasinya dan bagian " Manajemen ketergantungan ". Di sini kita melihat bahwa dulu ada konfigurasi (alias cakupan) yang disebut "kompilasi" dan itu berarti "ketergantungan diperlukan selama kompilasi". Namun kemudian diganti (dalam bahasa Inggris Superseded) dengan implementasi. Anda dapat membaca lebih lanjut tentang penggantian di bagian " Pemisahan API dan implementasi ". Ternyata ketergantungan ini akan berada pada “kompilasi classpath”. Namun terkadang kita ingin ketergantungan kita disertakan dalam artefak akhir. Untuk apa? Misalnya, kita akan memiliki toples yang dapat dieksekusi, yang seharusnya berisi semua yang diperlukan. Lalu apa yang harus kita lakukan? Pertama, tidak ada dukungan "di luar kotak" (yaitu, secara default, tanpa tindakan tambahan apa pun). Hal ini dijelaskan oleh fakta bahwa setiap orang ingin mengumpulkan arsip dengan caranya sendiri, dan Gradle mencoba menjadi minimalis. Kami juga tidak dapat menggunakan arsip jar di classpath (tanpa manipulasi tambahan pada kode), karena itu tidak bekerja seperti itu (Lihat " Oracle: Menambahkan Kelas ke Jalur Kelas File JAR " untuk lebih jelasnya). Oleh karena itu, cara yang paling indah adalah kode berikut dalam skrip build:

jar {
    manifest {
        attributes 'Main-Class': 'jrgradle.App'
    }
    from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
Dalam pengaturan tugas jar kami menentukan apa yang akan ditambahkan ke manifes file jar (lihat " Oracle: Mengatur Titik Masuk Aplikasi "). Dan kemudian kami mengatakan bahwa semua dependensi yang diperlukan untuk kompilasi akan dimasukkan ke dalam toples. Alternatifnya adalah dengan menggunakan " Plugin Gradle Shadow ". Ini mungkin tampak rumit, tetapi plugin lain bisa membuat hidup lebih mudah. Misalnya, saat membuat aplikasi web (berbeda dengan aplikasi java yang berjalan biasa), kita akan menggunakan plugin khusus - “ Plugin Gradle War ”, yang memiliki perilaku berbeda dan hidup kita akan lebih mudah di sana (semua dependensi yang diperlukan akan ditempatkan di direktori khusus yang terpisah oleh plugin itu sendiri. Pekerjaan tersebut diatur oleh bagaimana aplikasi web harus disusun. Tapi itu cerita yang sama sekali berbeda).
Pengenalan singkat tentang Gradle - 9

Hasil

Gradle adalah pilihan yang sangat baik untuk sistem pembangunan proyek. Hal ini dikonfirmasi oleh fakta bahwa ini digunakan oleh pengembang proyek terkenal seperti Spring dan Hibernate. Hanya hal-hal paling mendasar yang dibahas di atas. Di baliknya tersembunyi sejuta fitur dan peluang yang dimiliki pengembang. Gradle juga mendukung pembuatan proyek multi-modul, yang tidak tercakup dalam ulasan ini, namun Gradle sendiri memiliki tutorial yang sangat bagus: “ Membuat Pembangunan Multi-proyek ”. Saya harap ulasan ini juga menunjukkan bahwa dokumentasi Gradle ditulis pada versi 5+ dan Anda dapat dengan mudah menemukan apa yang Anda perlukan jika Anda memahami di mana mencarinya. Dan ini akan terjadi ketika Anda memahami dasar-dasarnya. Selain itu, Gradle memiliki tutorial yang bagus. Saya ingin mengakhiri dengan daftar kecil tentang apa lagi yang dapat Anda lihat menggunakan Gradle:
Pengenalan singkat tentang Gradle - 10
#Viacheslav
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION