Bagaimana saya bisa menghentikan pembangunan Gradle setelah mendeteksi masalah? Saya dapat menggunakan pernyataan, melemparkan pengecualian, melakukan System.exit (ide buruk), atau menggunakan fungsi khusus di Gradle (tapi saya tidak dapat menemukannya). Apa cara terbaik untuk Gradle (dan mengapa?).
162
require(something != whatever) { "No good!" }
sebagai lawan dari lebih verbose dan type-eeif(something != whatever){ throw new GradleException("No good!") }
GradleScriptException
ini adalah bahwa ia membutuhkan parameter kedua untuk suatu penyebab.make
adalah bahwarules
(tugas-s) berhasil atau gagal. Saya pernah mencobareturn false
- Gradle mengabaikannya dan terus berlari.Jika Anda ingin menghentikan pembangunan, lemparkan:
atau melempar subclass untuk pengecualian di atas. Beberapa pengecualian subkelas sebenarnya hanya gagal tugas saat ini tetapi terus dengan membangun.
sumber
Saat ini tidak ada metode khusus, meskipun ada diskusi untuk menambahkannya.
Cara yang disarankan untuk menghentikan pembangunan Gradle adalah dengan melemparkan pengecualian. Karena Groovy tidak memeriksa pengecualian, dan Gradle secara default tidak mencetak tipe pengecualian, itu tidak terlalu penting untuk pengecualian yang dilemparkan. Dalam membangun skrip, GradleException sering digunakan, tetapi pernyataan Groovy juga tampaknya masuk akal (tergantung pada keadaan dan audiens). Yang penting adalah memberikan pesan yang jelas. Menambahkan penyebab (jika tersedia) membantu untuk debugging (
--stacktrace
).Gradle menyediakan tipe pengecualian khusus
StopExecutionException
/StopActionException
untuk menghentikan tugas / tindakan tugas saat ini tetapi melanjutkan pembangunan.sumber
Pilihan lain jika Anda tidak memiliki keinginan untuk dapat menangkap pengecualian di kemudian hari adalah memanggil tugas semut gagal. Ini sedikit lebih mudah dibaca menurut saya dan Anda dapat memberikan pesan yang bagus kepada pengguna tanpa menggunakan --stacktrace.
Memberi Anda pesan seperti:
Mungkin Anda dapat menangkap ini (mungkin itu melempar BuildException semut?) Tetapi jika itu tujuan maka saya tidak akan menggunakan ant.fail. Saya hanya akan membuatnya mudah untuk melihat pengecualian apa yang ditangkap dengan melemparkan pengecualian standar gradle seperti yang disarankan tim_yates.
sumber
throw new GradleException("The sky is falling!!")
(Gradle 3.4.1)Melemparkan GradleException sederhana berfungsi dalam menghentikan skrip build. Ini berfungsi baik untuk memeriksa pengaturan lingkungan yang diperlukan.
Contoh:
sumber
Berikut adalah fragmen kode yang mencoba meniru bagaimana tugas javac Gradle melempar kesalahan:
Ketika perintah kembali
0
tidak ada output. Nilai lain akan mencetak standardOutput dan menghentikan build.CATATAN: Jika perintah Anda juga menulis ke errorOutput, Anda mungkin perlu memasukkannya ke dalam log kesalahan.
sumber