• Semut vs Maven vs Gradle (artikel semasa) • Menulis Plugin Custom Gradle
• Membuat Jar Lemak di Gradle
1. Pengenalan
Dalam artikel ini, kita akan meneroka tiga alat automasi binaan Java yang menguasai ekosistem JVM - Ant, Maven, dan Gradle .
Kami akan memperkenalkan masing-masing dan meneroka bagaimana alat automasi membina Java berkembang.
2. Semut Apache
Pada mulanya, Make adalah satu-satunya alat automasi binaan yang terdapat di luar penyelesaian homegrown . Make sudah ada sejak tahun 1976 dan karenanya, itu digunakan untuk membangun aplikasi Java pada awal Jawa.
Namun, banyak konvensi dari program C tidak sesuai dengan ekosistem Jawa, sehingga pada waktu Ant mengambil alih sebagai alternatif yang lebih baik.
Apache Ant (“Another Neat Tool”) adalah perpustakaan Java yang digunakan untuk mengotomatisasi proses build untuk aplikasi Java . Selain itu, Semut dapat digunakan untuk membangun aplikasi non-Java. Pada mulanya ia merupakan sebahagian daripada pangkalan data Apache Tomcat dan dilancarkan sebagai projek yang berdiri sendiri pada tahun 2000.
Dalam banyak aspek, Semut sangat mirip dengan Make, dan cukup mudah sehingga sesiapa sahaja boleh mula menggunakannya tanpa prasyarat tertentu. Fail build semut ditulis dalam XML, dan secara konvensional, fail tersebut dipanggil build.xml .
Fasa yang berbeza dari proses membangun disebut "sasaran".
Berikut adalah contoh fail build.xml untuk projek Java sederhana dengan kelas utama HelloWorld :
Fail binaan ini menentukan empat sasaran: bersihkan , menyusun , balang dan jalankan . Sebagai contoh, kita dapat menyusun kod dengan menjalankan:
ant compile
Ini akan mencetuskan sasaran bersih terlebih dahulu yang akan menghapus direktori "kelas". Selepas itu, kompilasi sasaran akan membuat semula direktori dan menyusun folder src ke dalamnya.
Manfaat utama Ant adalah kelenturannya. Semut tidak memaksakan konvensyen pengkodan atau struktur projek. Akibatnya, ini bermaksud bahawa Ant memerlukan pembangun untuk menulis semua perintah dengan sendirinya, yang kadang-kadang membawa kepada fail XML yang besar dan sukar dijaga.
Oleh kerana tidak ada konvensyen, hanya mengetahui Ant tidak bermaksud kita akan cepat memahami fail build Semut. Mungkin memerlukan sedikit masa untuk membiasakan diri dengan fail Ant yang tidak dikenali, yang merupakan keburukan berbanding dengan alat lain yang lebih baru.
Pada mulanya, Semut tidak mempunyai sokongan terpadu untuk pengurusan pergantungan. Namun, sebagai pengurusan kebergantungan menjadi suatu keharusan pada tahun-tahun kemudian, Apache Ivy dikembangkan sebagai sub-projek dari projek Apache Ant. Ia disatukan dengan Apache Ant, dan mengikut prinsip reka bentuk yang sama.
Walau bagaimanapun, batasan Semut awal kerana tidak mempunyai sokongan terpadu untuk pengurusan kebergantungan dan kekecewaan ketika bekerja dengan fail binaan XML yang tidak dapat dikendalikan menyebabkan penciptaan Maven.
3. Apache Maven
Apache Maven adalah pengurusan ketergantungan dan alat automasi build, terutama digunakan untuk aplikasi Java. Maven terus menggunakan fail XML seperti Ant tetapi dengan cara yang lebih terkawal. Nama permainan di sini adalah konvensyen mengenai konfigurasi.
Walaupun Semut memberikan fleksibiliti dan memerlukan semuanya ditulis dari awal, Maven bergantung pada konvensi dan memberikan perintah (tujuan) yang telah ditentukan.
Ringkasnya, Maven memungkinkan kita untuk fokus pada apa yang harus dilakukan oleh bangunan kita, dan memberi kita kerangka untuk melakukannya. Aspek positif lain dari Maven adalah bahawa ia memberikan sokongan terpadu untuk pengurusan pergantungan.
Fail konfigurasi Maven, yang mengandungi arahan pengurusan build dan dependency, adalah berdasarkan konvensyen yang disebut pom.xml . Selain itu, Maven juga menetapkan struktur projek yang ketat, sementara Semut juga memberikan kelonggaran.
Berikut adalah contoh fail pom.xml untuk projek Java sederhana yang sama dengan kelas utama HelloWorld dari sebelumnya:
4.0.0 baeldung mavenExample 0.0.1-SNAPSHOT Maven example junit junit 4.12 test
Walau bagaimanapun, sekarang struktur projek telah diseragamkan dan sesuai dengan konvensyen Maven:
+---src | +---main | | +---java | | | \---com | | | \---baeldung | | | \---maven | | | HelloWorld.java | | | | | \---resources | \---test | +---java | \---resources
Berbanding dengan Ant, tidak perlu menentukan setiap fasa dalam proses membina secara manual. Sebagai gantinya, kita boleh memanggil perintah Maven terbina dalam.
Sebagai contoh, kita dapat menyusun kod dengan menjalankan:
mvn compile
Pada intinya, seperti yang tercatat di halaman rasmi, Maven dapat dianggap sebagai kerangka pelaksanaan plugin, kerana semua pekerjaan dilakukan oleh plugin. Maven menyokong pelbagai jenis plugin yang tersedia, dan masing-masing dapat dikonfigurasi tambahan.
Salah satu plugin yang tersedia adalah Apache Maven Dependency Plugin yang mempunyai tujuan ketergantungan salinan yang akan menyalin kebergantungan kami ke direktori yang ditentukan.
Untuk menunjukkan tindakan plugin ini, mari masukkan plugin ini dalam fail pom.xml kami dan konfigurasikan direktori output untuk kebergantungan kami:
org.apache.maven.plugins maven-dependency-plugin copy-dependencies package copy-dependencies target/dependencies
Plugin ini akan dijalankan dalam fasa paket , jadi jika kita menjalankan:
mvn package
Kami akan melaksanakan plugin ini dan menyalin kebergantungan ke folder target / dependencies.
Terdapat juga artikel yang ada mengenai cara membuat JAR yang dapat dieksekusi menggunakan plugin Maven yang berbeza. Selain itu, untuk gambaran keseluruhan Maven yang terperinci, lihat panduan teras ini di Maven, di mana beberapa ciri utama Maven diterokai.
Maven menjadi sangat popular kerana fail binaan sekarang diseragamkan dan memerlukan lebih sedikit masa untuk mengekalkan fail binaan, berbanding dengan Ant. Namun, walaupun lebih standard daripada fail Semut, fail konfigurasi Maven masih cenderung menjadi besar dan membebankan.
Konvensyen ketat Maven datang dengan harga jauh lebih fleksibel daripada Ant. Penyesuaian matlamat sangat sukar, jadi menulis skrip binaan khas jauh lebih sukar untuk dilakukan, berbanding dengan Ant.
Walaupun Maven telah melakukan beberapa perbaikan serius dalam membuat proses pembuatan aplikasi lebih mudah dan lebih terseragam, ia tetap dilengkapi dengan harga kerana jauh lebih fleksibel daripada Ant. Ini membawa kepada penciptaan Gradle yang menggabungkan yang terbaik dari kedua dunia - fleksibiliti semut dan ciri Maven.
4. Gradle
Gradle adalah pengurusan ketergantungan dan alat automasi binaan yang dibina berdasarkan konsep Ant dan Maven.
Salah satu perkara pertama yang dapat kita perhatikan mengenai Gradle adalah bahawa ia tidak menggunakan fail XML, tidak seperti Ant atau Maven.
Seiring berjalannya waktu, pembangun menjadi semakin berminat untuk memiliki dan bekerja dengan bahasa khusus domain - yang, secara sederhana, akan memungkinkan mereka menyelesaikan masalah dalam domain tertentu menggunakan bahasa yang disesuaikan untuk domain tersebut.
Ini diadopsi oleh Gradle, yang menggunakan DSL berdasarkan Groovy atau Kotlin. Ini menyebabkan fail konfigurasi lebih kecil dengan kekacauan yang lebih kecil kerana bahasa itu dirancang khusus untuk menyelesaikan masalah domain tertentu. Fail konfigurasi Gradle adalah berdasarkan konvensyen yang disebut build.gradle di Groovy, atau build.gradle.kts di Kotlin.
Perhatikan bahawa Kotlin menawarkan sokongan IDE yang lebih baik daripada Groovy untuk penyelesaian automatik dan pengesanan ralat.
Berikut adalah contoh fail build.gradle untuk projek Java sederhana yang sama dengan kelas utama HelloWorld dari sebelumnya:
apply plugin: 'java' repositories { mavenCentral() } jar { baseName = 'gradleExample' version = '0.0.1-SNAPSHOT' } dependencies { testImplementation 'junit:junit:4.12' }
Kita boleh menyusun kod dengan menjalankan:
gradle classes
Pada dasarnya, Gradle dengan sengaja memberikan fungsi yang sangat sedikit. Pemalam menambah semua ciri berguna. Dalam contoh kami, kami menggunakan java plugin yang membolehkan kami menyusun kod Java dan ciri berharga lain.
Gradle memberikan nama langkah-langkah membangunnya sebagai "tugas", sebagai lawan dari "sasaran" Ant atau "fasa" Maven. Dengan Maven, kami menggunakan Apache Maven Dependency Plugin, dan ini adalah tujuan khusus untuk menyalin kebergantungan ke direktori yang ditentukan. Dengan Gradle, kita dapat melakukan perkara yang sama dengan menggunakan tugas:
task copyDependencies(type: Copy) { from configurations.compile into 'dependencies' }
Kami dapat menjalankan tugas ini dengan melaksanakan:
gradle copyDependencies
5. Kesimpulan
Dalam artikel ini, kami menyajikan Ant, Maven, dan Gradle - tiga alat automasi binaan Java.
Tidak menghairankan, Maven memegang sebahagian besar pasaran alat binaan hari ini.
Gradle, bagaimanapun, telah melihat penggunaan yang baik dalam pangkalan data yang lebih kompleks, kerana sebab-sebab berikut:
- Banyak projek sumber terbuka seperti Spring menggunakannya sekarang
- Ia lebih pantas daripada Maven untuk kebanyakan senario, berkat peningkatannya
- Ia menawarkan perkhidmatan analisis dan penyahpepijatan lanjutan
Walau bagaimanapun, Gradle nampaknya mempunyai kurva belajar yang lebih curam, terutama jika anda tidak biasa dengan Groovy atau Kotlin.
Seterusnya » Menulis Plugin Gradle Custom « Pengenalan Sebelumnya kepada Gradle