Memilih Alat Binaan yang Betul: Semut vs Maven vs Gradle
Semasa pembangunan perisian, pembangun harus membina semula kod yang sama berulang kali. Mereka sering berusaha menggunakan skrip bash atau bahasa skrip lain untuk mengotomatisasi tugas. Namun, ada alat binaan yang tersedia yang lebih sesuai untuk automasi binaan. Alat binaan utama adalah:
- Semut Apache dengan Ivy
- Maven
- Gradle
Mari selidik alat untuk mengetahui lebih lanjut.
Semut Apache dengan Ivy
Apache Ant adalah alat baris perintah berasaskan Java yang menggunakan fail XML untuk menentukan skrip binaan. Ini digunakan terutama untuk membangun Java tetapi juga dapat digunakan untuk pengembangan C / C ++. Tugas terbina dalam menyediakan cara untuk menyusun, memasang, menguji dan menjalankan aplikasi perisian. Pengguna juga boleh membuat "antlibs" mereka sendiri untuk meningkatkan fungsi Ant. Apache Ivy adalah alat pengurusan pergantungan yang mudah disatukan dengan Ant untuk menyediakan ekosistem yang lebih mantap. Perkembangan Semut bermula pada tahun 2000.
Kelebihan
- Pengawalan yang lebih baik terhadap keseluruhan proses pembinaan
- Cukup fleksibel untuk bekerja dengan sebarang proses kerja
Keburukan
- Fail binaan berasaskan XML dapat berkembang besar dan tidak dapat dikendalikan
- Banyak masa dan sumber diperlukan untuk mengekalkan skrip binaan
- Integrasi IDE sukar dicapai
Semut dengan Contoh Ivy
Anda boleh memasang Semut terbaru dari sini. Anda harus memuat turun zip, mengembangkan dan meletakkan folder tong sampah di jalan anda. Anda boleh menggunakan perintah berikut untuk melihat apakah Semut dipasang dengan betul:
$ ant-penukaranApache Ant (TM) versi 1.10.1 disusun pada 2 Februari 2017
Setelah memasang Ant, anda boleh memuat turun balang Ivy terbaru dan memasukkannya ke dalam folder lib di dalam direktori Ant.
Setelah anda memasang Ant, buat folder helloworld dan helloworld / src. Di dalam folder src, masukkan helloworld.fail java dengan kod:
/ **************************Mencetak "Hello World!"
*************************** /
kelas awam helloworld
utama kekosongan statik awam (String [] args)
Sistem.keluar.println ("Helo Dunia!");
Sekarang di folder helloworld buat binaan.fail xml dengan kod berikut:
Dan dalam folder helloworld yang sama, buat ivy.fail xml dengan kod berikut:
Struktur direktori akan kelihatan seperti ini:
Hai dunia| - membina.xml
| - ivy.xml
'- src
'-- Hai dunia.jawa
Sekarang anda boleh menjalankan build dengan arahan:
balang semut $Binaan yang berjaya harus memberikan output seperti ini:
balang semut $Buildfile: / Pengguna / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml
menyelesaikan:
[ivy: retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // semut.apache.org / ivy / ::
[ivy: retrieve] :: memuatkan tetapan :: url = jar: file: / Users / zak / BuildTools / ANT / apache
-semut-1.10.1 / lib / ivy-2.4.0.balang!/ org / apache / ivy / inti / tetapan / ivysettings.xml
[ivy: retrieve] :: menyelesaikan kebergantungan :: org.apache # helloworld; [dilindungi e-mel]
MacBook-Air.tempatan
[ivy: retrieve] confs: [lalai]
[ivy: retrieve] ditemui junit # junit; 4.12 di khalayak ramai
[ivy: retrieve] org terjumpa.hamcrest # hamcrest-core; 1.3 di khalayak ramai
[ivy: retrieve] :: laporan resolusi :: menyelesaikan 397ms :: artifak dl 15ms
---------------------------------------------------------------------
| | modul || artifak |
| conf | nombor | cari | dwnlded | diusir || nombor | dwnlded |
---------------------------------------------------------------------
| lalai | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[ivy: retrieve] :: mengambil :: org.apache # helloworld
[ivy: retrieve] confs: [lalai]
[ivy: ambil] 0 artifak disalin, 4 sudah diambil (0kB / 39ms)
menyusun:
[mkdir] Dibuat dir: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
kelas
[javac] / Pengguna / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml: 22: amaran:
'includeantruntime' tidak ditetapkan, lalai untuk membina.sysclasspath = terakhir; ditetapkan kepada palsu
untuk binaan berulang
[javac] Menyusun 1 fail sumber kepada / Pengguna / zak / _work / LearnBuildScripts / LearnANT /
helloworld / build / kelas
balang:
[mkdir] Dibuat dir: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin
[jar] Jar bangunan: / Pengguna / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
Hai dunia.balang
MEMBINA KEJAYAAN
Jumlah masa: 6 saat
Anda boleh mencuba fail balang seperti ini:
$ java -cp build / bin / helloworld.balang helloworldHai dunia!
Kami telah menentukan fail jar untuk dimasukkan ke dalam folder build / bin. Folder dibuat semasa pembinaan. Perintah jar semut memanggil sasaran balang dalam binaan.xml.
Maven
Maven dikembangkan untuk menyelesaikan masalah yang dihadapi dengan skrip berasaskan Ant. Itu menyimpan fail XML tetapi mengambil pendekatan yang berbeza untuk organisasi. Di Semut, pembangun harus membuat semua tugas. Maven mengurangkan penciptaan tugas dengan menerapkan standard yang lebih kuat untuk mengatur kod. Hasilnya, lebih mudah untuk memulakan projek standard.
Ia juga memperkenalkan muat turun kebergantungan yang menjadikan pembangunan lebih mudah. Sebelum pengenalan Ivy di Ant, pengguna harus menguruskan pergantungan secara tempatan. Maven menggunakan falsafah pengurusan kebergantungan terlebih dahulu.
Namun, standard ketat Mavens menyukarkan penulisan skrip binaan tersuai. Alat ini senang dikendalikan selagi projek itu mengikut piawaian yang ketat.
Kelebihan
- Muat turun kebergantungan automatik
- Semua kebergantungan direkodkan secara automatik dalam kawalan sumber sebagai sebahagian daripada skrip Maven
- Menyeragamkan dan mempermudah proses membina
- Bersepadu dengan mudah dengan sistem IDE dan CI / CD
Keburukan
- Tidak fleksibel dalam membuat aliran kerja tersuai
- Keluk pembelajaran yang curam dan prosesnya sukar difahami oleh pemula
- Mengambil masa untuk menyelesaikan masalah binaan dan integrasi perpustakaan baru
- Tidak bagus dengan pelbagai versi kebergantungan yang sama
Contoh Maven
Anda boleh memuat turun Maven terbaru dari sini. Anda boleh menyemak pemasangan seperti ini:
$ mvn - penukaranApache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00: 58: 13-07: 00)
Rumah Maven: / Pengguna / zak / BuildTools / Maven / apache-maven-3.5.2
Versi Java: 1.8.0_74, vendor: Oracle Corporation
Rumah Java: / Perpustakaan / Java / JavaVirtualMachines / jdk1.8.0_74.jdk / Kandungan / Rumah / jre
Lokasi lalai: en_US, pengekodan platform: UTF-8
Nama OS: "mac os x", versi: "10.11.6 ", lengkungan:" x86_64 ", keluarga:" mac "
Buat folder helloworld dan hasilkan projek dengan arahan berikut:
$ mvn archetype: menghasilkan -DgroupId = com.nama syarikat.helloworld -DartifactId = helloworld-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = false
Ia harus membuat struktur folder dan menghasilkan output yang kelihatan seperti ini:
[INFO] Mengimbas projek ..[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Membangun Projek Maven Stub (Tanpa POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: menjana (default-cli)> menghasilkan sumber
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ berdiri sendiri <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin: 3.0.0: menjana (default-cli) @ standalone-pom ---
[INFO] Menghasilkan projek dalam mod Batch
[INFO] ----------------------------------------------------------------------------
[INFO] Menggunakan parameter berikut untuk membuat projek dari Lama (1.x) Jenis Arkib:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Nilai: / Pengguna / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Parameter: pakej, Nilai: com.nama syarikat.Hai dunia
[INFO] Parameter: groupId, Nilai: com.nama syarikat.Hai dunia
[INFO] Parameter: artifactId, Nilai: helloworld
[INFO] Parameter: packageName, Nilai: com.nama syarikat.Hai dunia
[INFO] Parameter: versi, Nilai: 1.0-SNAPSHOT
[INFO] projek dibuat dari Lama (1.x) Arkib dalam dir: / Pengguna / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[INFO] ------------------------------------------------------------------------
[INFO] MEMBINA KEJAYAAN
[INFO] ------------------------------------------------------------------------
[INFO] Jumlah masa: 8.602 s
[INFO] Selesai pada: 2018-01-27T00: 05: 37-08: 00
[INFO] Ingatan Akhir: 15M / 152M
[INFO] ------------------------------------------------------------------------
Struktur folder kelihatan seperti ini:
Hai dunia| - pom.xml
'- src
| - utama
| '- java
| '- com
| '-- nama syarikat
| '-- Hai dunia
| '-- Aplikasi.jawa
'- ujian
'- java
'- com
'-- nama syarikat
'-- Hai dunia
'- Ujian App.jawa
The pom.xml mengandungi konfigurasi build. Di dalam pom.xml kodnya seperti ini:
_0.xsd ">
Anda boleh menghasilkan fail jar menggunakan arahan berikut:
pakej $ mvn[INFO] Mengimbas projek ..
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Membangun helloworld 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: sumber (lalai-sumber) @ helloworld ---
[AMARAN] Menggunakan pengekodan platform (sebenarnya UTF-8) untuk menyalin sumber yang disaring, i.e.
membina bergantung pada platform!
[INFO] langkau sumber yang tidak adaDirektori / Pengguna / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / main / sumber
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: kompilasi (default-compile) @ helloworld ---
[INFO] Perubahan dikesan - menyusun semula modul!
[PERINGATAN] Pengekodan fail belum ditetapkan, menggunakan pengekodan platform UTF-8, i.e. membina adalah
bergantung kepada platform!
[INFO] Menyusun 1 fail sumber kepada / Pengguna / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / target / kelas
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (lalai-testResources) @
Hai dunia ---
[AMARAN] Menggunakan pengekodan platform (sebenarnya UTF-8) untuk menyalin sumber yang disaring, i.e.
membina bergantung pada platform!
[INFO] langkau sumber yang tidak adaDirektori / Pengguna / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / ujian / sumber
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Perubahan dikesan - menyusun semula modul!
[PERINGATAN] Pengekodan fail belum ditetapkan, menggunakan pengekodan platform UTF-8, i.e. membina adalah
bergantung kepada platform!
[INFO] Menyusun 1 fail sumber kepada / Pengguna / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / kelas ujian
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: ujian (ujian lalai) @ helloworld ---
[INFO] Direktori laporan Surefire: / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / sasaran /
laporan pasti
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Menjalankan com.nama syarikat.Hai dunia.Ujian Aplikasi
Ujian dijalankan: 1, Kegagalan: 0, Kesalahan: 0, Langkau: 0, Masa berlalu: 0.014 saat
Keputusan:
Ujian dijalankan: 1, Kegagalan: 0, Kesalahan: 0, Langkau: 0
[INFO]
[INFO] --- maven-jar-plugin: 2.4: balang (default-jar) @ helloworld ---
[INFO] Jar bangunan: / Pengguna / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-SNAPSHOT.balang
[INFO] ------------------------------------------------------------------------
[INFO] MEMBINA KEJAYAAN
[INFO] ------------------------------------------------------------------------
[INFO] Jumlah masa: 5.624 s
[INFO] Selesai pada: 2018-01-27T00: 11: 10-08: 00
[INFO] Ingatan Akhir: 16M / 114M
[INFO] ------------------------------------------------------------------------
Anda boleh menjalankan fail balang seperti ini:
$ java -cp target / helloworld-1.0-SNAPSHOT.balang com.nama syarikat.Hai dunia.AplikasiHai dunia!
Fail balang dimasukkan ke dalam folder sasaran.
Gradle
Gradle menggabungkan kekuatan Ant dan Maven. Versi pertama Gradle dikeluarkan pada tahun 2012. Ia menyaksikan penggunaan yang pantas. Google kini menggunakannya untuk OS Android.
Daripada XML, Gradle menggunakan bahasa Groovy. Hasilnya, skrip binaan di Gradle lebih mudah ditulis dan dibaca. Pada mulanya ia menggunakan Ivy untuk pengurusan ketergantungan, tetapi kini menggunakan mesin pergantungannya sendiri.
Kelebihan
- Memberi penyeragaman sambil tetap fleksibel
- Mudah membaca dan menulis skrip binaan
- Lebih baik menangani pelbagai versi kebergantungan
- Mampu menangani pelbagai bahasa dan teknologi pengaturcaraan
- Komuniti aktif membantu mengembangkan alat
- Gradle DSL (Domain-Specific Language) menjadikannya struktur konfigurasi yang mudah
- Gradle memberikan peningkatan prestasi menggunakan secara bertahap, membangun cache dan Gradle Daemon
Keburukan
- Integrasi IDE tidak sebaik Maven
Contoh Gradle
Anda boleh memasang Gradle dari sini. Sebaik sahaja anda menyiapkan Gradle di jalan anda, anda boleh memeriksanya dengan:
$ gradle --versi------------------------------------------------------------
Gradle 4.5
------------------------------------------------------------
Masa binaan: 2018-01-24 17:04:52 UTC
Semakan: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Semut: Apache Ant (TM) versi 1.9.9 disusun pada 2 Februari 2017
JVM: 1.8.0_74 (Oracle Corporation 25.74-b02)
OS: Mac OS X 10.11.6 x86_64
Seterusnya, buat struktur direktori berikut:
Hai dunia| - membina.leret
'- src
| - utama
'- java
'-- Hai dunia
'-- Hai dunia.jawa
Untuk dunia helloworld.java meletakkan kod dari contoh Semut. Dan untuk membina.gradle masukkan kod berikut:
gunakan pemalam: 'java'versi = '1.0 '
repositori
mavenCentral ()
kebergantungan
testCompile group: 'junit', nama: 'junit', versi: '4.12 '
Anda boleh menggunakan perintah "gradle task -all" untuk melihat semua perintah yang ada. Gradle secara automatik mengambil plugin yang anda nyatakan dalam build.gradle file dan menunjukkan tugas tambahan yang ada kerana plugin.
Anda boleh mendapatkan binaan dengan menjalankan:
balang $ gradleMEMBINA KEJAYAAN dalam 1s
2 tugas yang boleh dilaksanakan: 2 dilaksanakan
Anda boleh menjalankan balang anda seperti ini:
$ java -cp build / libs / helloworld-1.0.balang helloworldHai dunia!
Fail jar dimasukkan ke dalam folder build / libs.
Kesimpulannya
Di antara alat binaan, Semut dapat berguna untuk projek yang lebih kecil sementara Maven lebih baik untuk memastikan semua pembangun mengikuti peraturan yang sama. Gradle adalah alat terbaru yang memberikan kelonggaran yang paling.
Rujukan:
- http: // semut.apache.org /
- http: // semut.apache.org / ivy /
- https: // maven.apache.org /
- https: // gradle.org /
- http: // makble.com / gradle-junit-helloworld-contoh
- https: // contoh.javacodegeeks.com / core-java / gradle / gradle-hello-world-tutorial /
- https: // gradle.org / maven-vs-gradle /
- https: // maven.apache.org / pemandu / memulakan / maven-dalam-lima minit.html
- https: // aliran tumpukan.com / questions / 20755437 / java-build-tools-ant-vs-maven
- https: // perbualan teknologi.com / 2014/06/18 / membina-alat /
- https: // www.quora.com / Apa-apa-yang-pro-dan-kontra-Maven-lawan-Ant-sebagai-bangunan-alat-untuk-Java