Semut vs Maven vs Gradle

Ant 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. Walau bagaimanapun, terdapat alat binaan yang tersedia yang lebih sesuai untuk automasi binaan. Alat binaan utama adalah:

Mari kita selidiki 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 antlib 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 di sini . Anda mesti memuat turun zip, mengembangkan dan meletakkan folder tong sampah di jalan anda. Anda boleh menggunakan perintah berikut untuk melihat apakah Semut dipasang dengan betul:

$ semut-perubahan
Semut Apache(TM)versi 1.10.1 disusun pada bulan Februari2 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 fail helloworld.java dengan kod:

/ **************************

Mencetak 'Hello World!'

*************************** /

awam kelasHai dunia{

awam statik batalutama( Tali []berhujah) {
Sistem .keluar.println('Hai dunia!');
}

}

Sekarang di folder helloworld buat fail build.xml dengan kod berikut:

xmlns: ivy='antlib: org.apache.ivy.ant' nama='Hai dunia' lalai='balang'>

nama='src.dir' nilai='src'/>
nama='bina.dir' nilai='bina'/>
nama='class.dir' nilai='$ {build.dir} / kelas'/>
nama='am.dir' nilai='$ {build.dir} / tong sampah'/>
nama='lib.dir' nilai='lib' />
ID='lib.path.id'>
kepada anda='$ {lib.dir}' />
>

nama='tekad'>
/>
>

nama='bersih'>
kepada anda='$ {build.dir}'/>
>

nama='menyusun' bergantung='tekad'>
kepada anda='$ {class.dir}'/>
srcdir='$ {src.dir}' destdir='$ {class.dir}' classpathref='lib.path.id'/>
>

nama='balang' bergantung='menyusun'>
kepada anda='$ {bin.dir}'/>
musnah='$ {bin.dir} / $ {ant.project.name} .jar' berdasarkan='$ {class.dir}'/>
>

>

Dan dalam folder helloworld yang sama, buat fail ivy.xml dengan kod berikut:

versi='2.0'>
organisasi='org.apache' modul='Hai dunia'/>
>
org='junit' nama='junit' rev='4.12'/>
>
>

Struktur direktori akan kelihatan seperti ini:

Hai dunia
| - build.xml
| - ivy.xml
- - src
`` helloworld.java

Sekarang anda boleh menjalankan build dengan arahan:

$semutbalang

Binaan yang berjaya harus memberikan output seperti ini:

balang semut $
Buildfile: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

menyelesaikan:
[ivy: retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: retrieve] :: memuatkan tetapan :: url = jar: file: / Users / zak / BuildTools / ANT / apache
-ant-1.10.1 / lib / ivy-2.4.0.jar! /org/apache/ivy/core/settings/ivysettings.xml
[ivy: retrieve] :: menyelesaikan kebergantungan :: org.apache # helloworld; [dilindungi e-mel]
MacBook-Air.local
[ivy: retrieve] confs: [lalai]
[ivy: retrieve] menemui junit # junit; 4.12 di khalayak ramai
[ivy: retrieve] menemui org.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] :: pengambilan :: 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] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: amaran:
'includeantruntime'tidak ditetapkan, lalai ke build.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 /
helloworld.jar

MEMBINA KEJAYAAN
Jumlah masa: 6 saat

Anda boleh mencuba fail balang seperti ini:

$ java -cp build / bin / helloworld.balangHai dunia
Hai dunia!

Kami telah menentukan fail jar untuk dimasukkan ke dalam folder build / bin. Folder dibuat semasa pembinaan. Perintah jar semut memanggil sasaran jar dalam build.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, pemaju harus membuat semua tugas. Maven mengurangkan pembuatan 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.

Walau bagaimanapun, 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 membina dan integrasi perpustakaan baru
  • Tidak baik dengan pelbagai versi kebergantungan yang sama

Contoh Maven

Anda boleh memuat turun Maven terbaru dari di sini . Anda boleh memeriksa pemasangan seperti ini:

$ mvn - penukaran
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017.-10-18T00:58:13-07: 00)
Rumah Maven: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Versi Java: 1.8.0_74, vendor: Oracle Corporation
Rumah Java: /Library/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.Hai dunia-DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =salah

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: menghasilkan (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: menghasilkan (default-cli) @ standalone-pom ---
[INFO] Menghasilkan projek dalam mod Batch
[INFO] ----------------------------------------------- -----------------------------
[INFO] Menggunakan parameter berikut untuk membuat projek dari Old Archetype (1.x):
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------- -----------------------------
[INFO] Parameter: basedir, Nilai: / Pengguna / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Parameter: pakej, Nilai: com.companyname.helloworld
[INFO] Parameter: groupId, Nilai: com.companyname.helloworld
[INFO] Parameter: artifactId, Nilai: helloworld
[INFO] Parameter: packageName, Value: com.companyname.helloworld
[INFO] Parameter: versi, Nilai: 1.0-SNAPSHOT
[INFO] projek dibuat dari Old (1.x) Archetype dalam dir: / Users / 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
| '-jawa
| '- dengan
| '-- nama syarikat
| '-- Hai dunia
| '- App.java
'-ujian
'-jawa
'- dengan
'-- nama syarikat
'-- Hai dunia
'- AppTest.java

Pom.xml mengandungi konfigurasi build. Di dalam pom.xml kodnya seperti ini:

xmlns='http://maven.apache.org/POM/4.0.0' xmlns: xsi='http://www.w3.org/2001/
XMLSchema-instance '
xsi: schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>4.0.0>
>com.companyname.helloworld>
>Hai dunia>
>balang>
>1.0-SNAPSHOT>
>Hai dunia>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>ujian>
>
>
>

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 ditapis, iaitu
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: compile (default-compile) @ helloworld ---
[INFO] Perubahan dikesan - mengumpulkan semula modul!
[PERINGATAN] Pengekodan fail belum ditetapkan, menggunakan pengekodan platform UTF-8, iaitu build 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 (default-testResources) @
Hai dunia ---
[AMARAN] Menggunakan pengekodan platform (sebenarnya UTF-8) untuk menyalin sumber yang ditapis, iaitu
membina bergantung pada platform!
[INFO] langkau sumber yang tidak adaDirektori / Pengguna / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / test / sumber
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Perubahan dikesan - mengumpulkan semula modul!
[PERINGATAN] Pengekodan fail belum ditetapkan, menggunakan pengekodan platform UTF-8, iaitu build 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: test (default-test) @ helloworld ---
[INFO] Direktori laporan Surefire: / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / sasaran /
laporan pasti

-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
Menjalankan com.companyname.helloworld.AppTest
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: jar (default-jar) @ helloworld ---
[INFO] Jar bangunan: / Pengguna / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-SNAPSHOT.jar
[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.balangdengan.nama syarikat.Hai dunia.Aplikasi
Hai dunia!

Fail balang dimasukkan ke dalam folder sasaran.

Gradle

Gradle menggabungkan kekuatan Semut dan Maven. Versi pertama Gradle dikeluarkan pada tahun 2012. Ia telah diterima pakai dengan pantas. Google sedang 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, membina cache dan Gradle Daemon

Keburukan

  • Integrasi IDE tidak sebaik Maven

Contoh Gradle

Anda boleh memasang Gradle dari di sini . Sebaik sahaja anda menyiapkan Gradle di jalan anda, anda boleh memeriksanya dengan:

$ leret- penukaran

-------------------------------------------------- ----------
Gradle4.5
-------------------------------------------------- ----------

Membina masa:2018-01-24 17: 04:52UTC
Semakan: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy: 2.4.12
Semut: Semut Apache(TM)versi 1.9.9 disusun pada Februari2 2017.
JVM: 1.8.0_74(Oracle Corporation25.74-b02)
OS: Mac OS X 10.11.6 x86_64

Seterusnya, buat struktur direktori berikut:

Hai dunia
| -membina.leret
'-src
| -utama
'-jawa
'-Hai dunia
'-Hai dunia.jawa

Untuk helloworld.java letakkan kod dari contoh Semut. Dan untuk build.gradle masukkan kod berikut:

sapukan pemalam: 'java'

versi= '1.0'

repositori{
mavenCentral()
}

kebergantungan{
testCompile kumpulan: 'junit', nama: 'junit', versi: '4.12'
}

Anda boleh menggunakan tugas gradle –semua perintah untuk melihat semua perintah yang ada. Gradle secara automatik mengambil plugin yang anda tentukan dalam fail build.gradle dan menunjukkan kepada anda tugas tambahan yang ada disebabkan oleh plugin tersebut.

Anda boleh mendapatkan binaan dengan menjalankan:

balang $ gradle

BANGUN KEJAYAAN dalam 1s
2tugas yang boleh dilaksanakan:2dilaksanakan

Anda boleh menjalankan balang anda seperti ini:

$ java -cp build / libs / helloworld-1.0.balangHai dunia
Hai dunia!

Fail jar dimasukkan ke dalam folder build / libs.

Kesimpulannya

Di antara alat binaan, Ant boleh 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 banyak.

Rujukan: