Panduan untuk Gradle Wrapper

1. Gambaran keseluruhan

Gradle biasanya digunakan oleh pemaju untuk menguruskan kitaran hidup projek mereka. Ini adalah pilihan alat binaan lalai untuk semua projek Android baru.

Dalam tutorial ini, kita akan belajar mengenai Gradle Wrapper, utiliti yang menyertainya yang memudahkan pengagihan projek.

2. Pembungkus Gradle

Untuk membina projek berasaskan Gradle, kita perlu memasang Gradle di mesin kita. Namun, jika versi yang dipasang tidak sesuai dengan versi projek, kita mungkin akan menghadapi banyak masalah ketidaksesuaian.

Gradle Wrapper, juga disebut Wrapper secara ringkas, menyelesaikan masalah ini. Ini adalah skrip yang menjalankan tugas Gradle dengan versi yang dinyatakan . Sekiranya versi yang dinyatakan tidak dipasang, Wrapper memasang versi yang diperlukan.

Manfaat utama Wrapper adalah kita dapat:

  • Bina projek dengan Wrapper pada mesin mana pun tanpa perlu memasang Gradle terlebih dahulu
  • Mempunyai versi Gradle yang tetap. Ini menghasilkan pembinaan yang boleh digunakan semula dan lebih mantap pada saluran paip CI
  • Tingkatkan ke versi Gradle baru dengan mudah dengan mengubah definisi Wrapper

Di bahagian seterusnya, kami akan menjalankan tugas Gradle yang memerlukan Gradle dipasang secara tempatan.

2.1. Menghasilkan Fail Pembungkus

Untuk menggunakan Wrapper, kita perlu menghasilkan beberapa fail tertentu. Kami akan menghasilkan fail-fail ini menggunakan tugas Gradle bawaan yang disebut wrapper. Perhatikan bahawa kita hanya perlu menghasilkan fail ini sekali sahaja.

Sekarang, mari jalankan tugas pembungkus di direktori projek kami:

$ gradle wrapper 

Mari lihat output arahan ini:

Mari kita lihat apakah fail-fail ini:

  • gradle-wrapper.jar mengandungi kod untuk memuat turun pengedaran Gradle yang ditentukan dalam fail gradle-wrapper.properties
  • gradle-wrapper.properties mengandungi sifat runtime Wrapper - yang paling penting, versi pengedaran Gradle yang serasi dengan projek semasa
  • gradlew adalah skrip yang melaksanakan tugas Gradle dengan Wrapper
  • gradlew.bat adalah skrip kumpulan setara gradlew untuk mesin Windows

Secara lalai, tugas wrapper menghasilkan fail Wrapper dengan versi Gradle yang kini dipasang di mesin. Kami boleh menentukan versi lain jika diperlukan:

$ gradle wrapper --gradle-version 6.3 

Kami mengesyorkan memasukkan fail Wrapper ke dalam sistem kawalan sumber seperti GitHub. Dengan cara ini kita memastikan bahawa pembangun lain dapat menjalankan projek tanpa perlu memasang Gradle.

2.2. Menjalankan Perintah Gradle dengan Wrapper

Kita boleh menjalankan tugas Gradle dengan Wrapper dengan menggantikan gradle dengan gradlew .

Untuk menyenaraikan tugas yang tersedia, kita dapat menggunakan perintah tugas gradlew :

$ gradlew tasks

Mari lihat outputnya:

Help tasks ---------- buildEnvironment - Displays all buildscript dependencies declared in root project 'gradle-wrapper'. components - Displays the components produced by root project 'gradle-wrapper'. [incubating] dependencies - Displays all dependencies declared in root project 'gradle-wrapper'. dependencyInsight - Displays the insight into a specific dependency in root project 'gradle-wrapper'. dependentComponents - Displays the dependent components of components in root project 'gradle-wrapper'. [incubating] help - Displays a help message. model - Displays the configuration model of root project 'gradle-wrapper'. [incubating] outgoingVariants - Displays the outgoing variants of root project 'gradle-wrapper'. projects - Displays the sub-projects of root project 'gradle-wrapper'. properties - Displays the properties of root project 'gradle-wrapper'. tasks - Displays the tasks runnable from root project 'gradle-wrapper'.

Seperti yang kita lihat, outputnya sama seperti yang kita dapat ketika menjalankan tugas ini dengan perintah gradle .

3. Masalah Umum

Sekarang, mari kita lihat beberapa masalah umum yang mungkin kita hadapi ketika bekerja dengan Wrapper.

3.1. Global .gitignore yang Mengabaikan Semua Fail Jar

Beberapa organisasi tidak membenarkan pemaju menyemak fail jar ke dalam sistem kawalan sumbernya. Biasanya, projek tersebut mempunyai peraturan dalam fail .gitignore global untuk mengabaikan semua fail jar. Oleh itu, fail gradle-wrapper.jar tidak diperiksa ke git repositori. Atas sebab ini, tugas Wrapper gagal dijalankan pada mesin lain. Dalam kes sedemikian, kita perlu menambahkan fail gradle-wrapper.jar ke git dengan kuat :

git add -f gradle/wrapper/gradle-wrapper.jar

Begitu juga, kita mungkin mempunyai fail .gitignore khusus projek yang mengabaikan fail jar. Kita boleh memperbaikinya dengan meredakan peraturan .gitignore atau dengan menambahkan fail balang pembungkus dengan kuat, seperti yang ditunjukkan di atas.

3.2. Folder Pembungkus Hilang

Semasa memeriksa projek berasaskan Wrapper, kita mungkin lupa memasukkan folder wrapper yang ada di dalam folder gradle . Tetapi seperti yang telah kita lihat di atas, folder wrapper mengandungi dua fail kritikal: gradle-wrapper.jar dan gradle-wrapper.properties.

Tanpa fail ini, kami akan mendapat kesilapan ketika menjalankan tugas Gradle dengan Wrapper. Oleh itu, kita mesti menyemak folder pembungkus ke dalam sistem kawalan sumber .

3.3. Fail Pembungkus yang Dihapus

Projek berasaskan Gradle mengandungi folder .gradle yang menyimpan cache untuk mempercepat tugas Gradle. Kadang kala, kita perlu mengosongkan cache untuk menyelesaikan masalah membina Gradle. Biasanya, kami membuang keseluruhan folder .gradle . Tetapi kita mungkin salah membuat folder Wrapper gradle dengan folder .gradle dan membuangnya juga. Selepas itu, kita pasti akan menghadapi masalah ketika mencuba menjalankan tugas Gradle dengan Wrapper.

Kami dapat menyelesaikan masalah ini dengan menarik perubahan terkini dari sumbernya . Sebagai alternatif, kita boleh menghasilkan semula fail Wrapper.

4. Kesimpulan

Dalam tutorial ini, kami mengetahui tentang Gradle Wrapper dan penggunaan asasnya. Kami juga mengetahui tentang beberapa masalah umum yang mungkin kami hadapi ketika bekerja dengan Gradle Wrapper.

Seperti biasa, kita dapat menyemak projek dengan fail Gradle Wrapper yang dihasilkan di GitHub.