Ant vs Maven vs Gradle

Ant Vs Maven Vs Gradle



Yazılım geliştirme sırasında geliştiricilerin aynı kodu tekrar tekrar oluşturması gerekir. Görevi otomatikleştirmek için genellikle bash komut dosyalarını veya diğer komut dosyası dillerini kullanmaya çalışırlar. Ancak, yapı otomasyonu için daha uygun olan yapı araçları mevcuttur. Baskın inşa araçları şunlardır:

Daha fazlasını öğrenmek için araçları inceleyelim.







Ivy ile Apache Karınca

Apache Ant, derleme komut dosyalarını tanımlamak için XML dosyalarını kullanan Java tabanlı bir komut satırı aracıdır. Ağırlıklı olarak Java derlemeleri için kullanılır, ancak C/C++ geliştirme için de kullanılabilir. Yerleşik görevler, yazılım uygulamalarını derlemek, birleştirmek, test etmek ve çalıştırmak için yollar sağlar. Kullanıcılar ayrıca Ant'ın işlevselliğini geliştirmek için kendi antlib'lerini oluşturabilir. Apache Ivy, daha sağlam bir ekosistem sağlamak için Ant ile kolayca entegre olan bir bağımlılık yönetimi aracıdır. Ant'ın gelişimi 2000 yılında başladı.



Artıları



  • Genel oluşturma süreci üzerinde daha iyi kontrol
  • Herhangi bir iş süreciyle çalışacak kadar esnek

Eksileri





  • XML tabanlı derleme dosyaları büyüyebilir ve sürdürülemez hale gelebilir
  • Derleme komut dosyalarını korumak için çok fazla zaman ve kaynak gereklidir
  • IDE entegrasyonunu başarmak zor

Sarmaşık Örneği ile Karınca

En son Ant'ı şu adresten yükleyebilirsiniz: Burada . Zip'i indirmeniz, genişletmeniz ve bin klasörünü yolunuza koymanız gerekir. Ant'in düzgün kurulup kurulmadığını görmek için aşağıdaki komutu kullanabilirsiniz:

$ karınca-sürüm
Apaçi Karıncası(ÇB)1.10.1 sürümü Şubat'ta derlendi2 2017

Ant'ı kurduktan sonra, en son Ivy jar'ı indirebilir ve Ant dizini içindeki lib klasörüne koyabilirsiniz.



Ant'ı kurduktan sonra, helloworld ve helloworld/src klasörlerini oluşturun. src klasörünün içine, helloworld.java dosyasını şu kodla birlikte koyun:

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

'Merhaba Dünya!' Yazdırır

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

halka açık sınıfSelam Dünya{

halka açık statik geçersizana( Sicim []argümanlar) {
sistem .dışarı.println('Selam Dünya!');
}

}

Şimdi merhabaworld klasöründe aşağıdaki kodla bir build.xml dosyası oluşturun:

xmlns:sarmaşık='antlib:org.apache.ivy.ant' isim='Selam Dünya' varsayılan='kavanoz'>

isim='src.dir' değer='src'/>
isim='inşa.dir' değer='yapı'/>
isim='classes.dir' değer='${build.dir}/sınıflar'/>
isim='am.dir' değer='$ {build.dir} / bin'/>
isim='lib.dir' değer='lib' />
İD='lib.path.id'>
sana='$ {lib.dir}' />
>

isim='çözmek'>
/>
>

isim='temiz'>
sana='$ {build.dir}'/>
>

isim='derlemek' bağlı olmak='çözmek'>
sana='$ {classes.dir}'/>
kaynak dizini='$ {src.dir}' destdir='$ {classes.dir}' sınıf yolu rehberi='lib.path.id'/>
>

isim='kavanoz' bağlı olmak='derlemek'>
sana='$ {bin.dir}'/>
destfile='${bin.dir}/${ant.project.name}.jar' bazdir='$ {classes.dir}'/>
>

>

Ve aynı helloworld klasöründe, aşağıdaki kodla ivy.xml dosyasını oluşturun:

versiyon='2.0'>
organizasyon='org.apache' modül='Selam Dünya'/>
>
kuruluş='junit' isim='junit' devir='4.12'/>
>
>

Dizin yapısı şöyle görünmelidir:

Selam Dünya
|-- build.xml
| - ivy.xml
`- src
`- merhabaworld.java

Artık derlemeyi şu komutla çalıştırabilirsiniz:

$karıncakavanoz

Başarılı bir derleme şöyle bir çıktı sağlamalıdır:

$ karınca kavanozu
Yapı dosyası: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

çözmek:
[ivy:retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] :: yükleme ayarları :: 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] :: bağımlılıkları çözme :: org.Apache#helloworld; [e-posta korumalı]
MacBook-Air.local
[ivy:retrieve] confs: [varsayılan]
[ivy:retrieve] herkesin içinde junit#junit;4.12 bulundu
[ivy:retrieve] org.hamcrest#hamcrest-core;1.3'ü herkese açık olarak buldu
[ivy:retrieve] :: çözünürlük raporu :: 397ms çözümle :: eserler dl 15ms
-------------------------------------------------- -------------------
| | modüller || eserler |
| konf | sayı| ara|dwnlded|kovuldu|| sayı|azaldı|
-------------------------------------------------- -------------------
| varsayılan | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[ivy:retrieve] :: alınıyor :: org.apache#helloworld
[ivy:retrieve] confs: [varsayılan]
[ivy:retrieve] 0 yapı kopyalandı, 4 zaten alındı ​​(0kB/39ms)

derlemek:
[mkdir] Oluşturulan dizin: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
sınıflar
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: uyarı:
'includeantruntime' ayarlanmadı, varsayılan olarak build.sysclasspath=last; yanlış olarak ayarla
tekrarlanabilir yapılar için
[javac] 1 kaynak dosya /Users/zak/_work/LearnBuildScripts/LearnANT/ dizinine derleniyor
merhabadünya/yapı/sınıflar

kavanoz:
[mkdir] Oluşturulan dizin: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Yapı kavanozu: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
merhabadünya.jar

BAŞARILI YAPI
Toplam süre: 6 saniye

Jar dosyasını şu şekilde deneyebilirsiniz:

$ java -cp inşa/bin/helloworld.kavanozSelam Dünya
Selam Dünya!

build/bin klasörüne atılacak jar dosyasını tanımladık. Klasörler derleme sırasında oluşturulur. ant jar komutu, build.xml içindeki jar hedefini çağırır.

Uzman

Maven, Ant tabanlı komut dosyası oluşturma ile karşılaşılan sorunları çözmek için geliştirildi. XML dosyalarını tuttu, ancak organizasyona farklı bir yaklaşım getirdi. Ant'ta geliştiricilerin tüm görevleri oluşturması gerekir. Maven, kodu düzenlemek için daha güçlü standartlar uygulayarak görev oluşturmayı azaltır. Sonuç olarak, standart projelere başlamak daha kolaydır.

Ayrıca, geliştirmeyi kolaylaştıran bağımlılık indirmelerini de tanıttı. Ivy'nin Ant'ta tanıtılmasından önce, kullanıcıların bağımlılıkları yerel olarak yönetmesi gerekiyordu. Maven önce bağımlılık yönetimi felsefesini benimsedi.

Ancak, Mavens'in katı standartları, özel derleme komut dosyaları yazmayı zorlaştırır. Proje katı standartları takip ettiği sürece araçla çalışmak kolaydır.

Artıları

  • Otomatik bağımlılık indirmeleri
  • Tüm bağımlılıklar, Maven komut dosyalarının bir parçası olarak kaynak denetimine otomatik olarak kaydedilir.
  • Oluşturma sürecini standartlaştırır ve basitleştirir
  • IDE'ler ve CI/CD sistemleriyle kolayca entegre olur

Eksileri

  • Özel iş akışları oluşturmada esnek değil
  • Dik öğrenme eğrisi ve acemilerin anlaması için süreç zor
  • Derleme sorunlarını ve yeni kitaplık entegrasyonlarını çözmek için zaman alan
  • Aynı bağımlılığın birden çok sürümüyle iyi değil

Maven Örneği

En son Maven'i şuradan indirebilirsiniz: Burada . Kurulumu şu şekilde kontrol edebilirsiniz:

$ mvn --sürüm
Apaçi Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00:58:13-07:00)
Maven ana sayfası: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Java sürümü: 1.8.0_74, satıcı: Oracle Corporation
Java ana sayfası: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/İçindekiler/Ana Sayfa/jre
Varsayılan yerel ayar: en_US, platform kodlaması: UTF-8
işletim sistemi adı:'Mac OS X', sürüm:'10.11.6', kemer:'x86_64', aile:'Mac'

Bir helloworld klasörü oluşturun ve aşağıdaki komutla bir proje oluşturun:

$ mvn arketip:oluştur -DgroupId=com.Şirket Adı.Selam Dünya-DartifactId=merhaba dünya
-DarchetypeArtifactId = maven-arketip-hızlı başlangıç ​​-DinteractiveMode =YANLIŞ

Klasör yapısını oluşturmalı ve şuna benzeyen çıktıyı oluşturmalıdır:

[BİLGİ] Projeler taranıyor...
[BİLGİ]
[BİLGİ] -------------------------------------------------- -------------------------
[BİLGİ] Bina Maven Stub Projesi (POM Yok) 1
[BİLGİ] -------------------------------------------------- -------------------------
[BİLGİ]
[BİLGİ] >>> maven-archetype-plugin:3.0.0:generate (varsayılan-cli) > create-sources
@ bağımsız-pom >>>
[BİLGİ]
[BİLGİ]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ bağımsız-pom<<<
[BİLGİ]
[BİLGİ]
[BİLGİ] --- maven-arketip-eklenti:3.0.0:oluştur (varsayılan-cli) @ bağımsız-pom ---
[BİLGİ] Toplu modda proje oluşturuluyor
[BİLGİ] -------------------------------------------------- -----------------------------
[BİLGİ] Eski (1.x) Arketipinden proje oluşturmak için aşağıdaki parametreleri kullanmak:
maven-arketip-hızlı başlangıç:1.0
[BİLGİ] -------------------------------------------------- -----------------------------
[BİLGİ] Parametre: basedir, Değer: /Users/zak/_work/LearnBuildScripts/LearnMaven
[BİLGİ] Parametre: paket, Değer: com.companyname.helloworld
[BİLGİ] Parametre: groupId, Değer: com.companyname.helloworld
[BİLGİ] Parametre: yapay kimlik, Değer: merhabaworld
[BİLGİ] Parametre: packageName, Value: com.companyname.helloworld
[BİLGİ] Parametre: sürüm, Değer: 1.0-SNAPSHOT
Eski (1.x) Arketipinden oluşturulan [BİLGİ] projesi dir: /Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[BİLGİ] -------------------------------------------------- -------------------------
[BİLGİ] BAŞARI OLUŞTURMA
[BİLGİ] -------------------------------------------------- -------------------------
[BİLGİ] Toplam süre: 8.602 s
[BİLGİ] Bitiş tarihi: 2018-01-27T00:05:37-08:00
[BİLGİ] Son Bellek: 15M/152M
[BİLGİ] -------------------------------------------------- -------------------------

Klasör yapısı şöyle görünmelidir:

Selam Dünya
|- pom.xml
``-- kaynak
|-- ana
| ``-java
| ``-- ile birlikte
| ``-- Şirket Adı
| ``-- Selam Dünya
| ``- Uygulama.java
``-Ölçek
``-java
``-- ile birlikte
``-- Şirket Adı
``-- Selam Dünya
``- AppTest.java

pom.xml, yapı yapılandırmalarını içerir. pom.xml içinde kod şöyle görünür:

xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/
XMLSchema örneği'
xsi:şemaKonum='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd'>
>4.0.0>
>com.şirketadı.merhabadünya>
>Selam Dünya>
>kavanoz>
>1.0-ANLIK GÖRÜNTÜ>
>Selam Dünya>
>http://maven.apache.org>
>
>
>haziran>
>haziran>
>3.8.1>
>Ölçek>
>
>
>

Aşağıdaki komutu kullanarak jar dosyasını oluşturabilirsiniz:

$ milyon paket

[BİLGİ] Projeler taranıyor...
[BİLGİ]
[BİLGİ] -------------------------------------------------- -------------------------
[BİLGİ] Helloworld 1.0-SNAPSHOT oluşturma
[BİLGİ] -------------------------------------------------- -------------------------
[BİLGİ]
[BİLGİ] --- maven-resources-plugin:2.6:resources (varsayılan-kaynaklar) @ merhabaworld ---
[UYARI] Filtrelenmiş kaynakları kopyalamak için platform kodlamasını (aslında UTF-8) kullanma, ör.
yapı platforma bağlıdır!
[BİLGİ] mevcut olmayan resourceDirectory'yi atla /Users/zak/_work/LearnBuildScripts/LearnMaven/
merhabaworld/src/main/kaynaklar
[BİLGİ]
[BİLGİ] --- maven-derleyici-eklenti: 3.1: derleme (varsayılan derleme) @ merhabaworld ---
[BİLGİ] Değişiklikler algılandı - modül yeniden derleniyor!
[UYARI] UTF-8 platform kodlaması kullanılarak dosya kodlaması ayarlanmadı, yani derleme
platforma bağlı!
[BİLGİ] 1 kaynak dosya /Users/zak/_work/LearnBuildScripts/LearnMaven/ dizinine derleniyor
merhabadünya/hedef/sınıflar
[BİLGİ]
[BİLGİ] --- maven-resources-plugin:2.6:testResources (varsayılan-testResources) @
Selam Dünya ---
[UYARI] Filtrelenmiş kaynakları kopyalamak için platform kodlamasını (aslında UTF-8) kullanma, ör.
yapı platforma bağlıdır!
[BİLGİ] mevcut olmayan resourceDirectory'yi atla /Users/zak/_work/LearnBuildScripts/LearnMaven/
merhabaworld/src/test/kaynaklar
[BİLGİ]
[BİLGİ] --- maven-derleyici-eklentisi:3.1:testCompile (varsayılan-testDerleme) @ merhabaworld ---
[BİLGİ] Değişiklikler algılandı - modül yeniden derleniyor!
[UYARI] UTF-8 platform kodlaması kullanılarak dosya kodlaması ayarlanmadı, yani derleme
platforma bağlı!
[BİLGİ] 1 kaynak dosya /Users/zak/_work/LearnBuildScripts/LearnMaven'de derleniyor
/helloworld/hedef/test-sınıfları
[BİLGİ]
[BİLGİ] --- maven-surefire eklentisi:2.12.4:test (varsayılan test) @ merhabaworld ---
[BİLGİ] Surefire rapor dizini: /Users/zak/_work/LearnBuildScripts/LearnMaven
/merhaba dünya/hedef/
kesin-raporlar

-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
com.companyname.helloworld.AppTest'i çalıştırma
Test çalıştırma: 1, Hatalar: 0, Hatalar: 0, Atlandı: 0, Geçen Süre: 0,014 sn

Sonuçlar :

Çalıştırılan testler: 1, Hatalar: 0, Hatalar: 0, Atlandı: 0

[BİLGİ]
[BİLGİ] --- maven-jar-plugin:2.4:jar (varsayılan-jar) @ merhabaworld ---
[BİLGİ] Jar oluşturma: /Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
merhabaworld-1.0-SNAPSHOT.jar
[BİLGİ] -------------------------------------------------- -------------------------
[BİLGİ] BAŞARI OLUŞTURMA
[BİLGİ] -------------------------------------------------- -------------------------
[BİLGİ] Toplam süre: 5.624 sn
[BİLGİ] Bitiş tarihi: 2018-01-27T00:11:10-08:00
[BİLGİ] Son Bellek: 16M/114M
[BİLGİ] -------------------------------------------------- -------------------------

Jar dosyasını şu şekilde çalıştırabilirsiniz:

$ java -cp hedefi/helloworld-1.0-ENSTANTANE FOTOĞRAF.kavanozile birlikte.Şirket Adı.Selam Dünya.Uygulama
Selam Dünya!

Jar dosyası hedef klasöre konur.

kepçe

Gradle, Ant ve Maven'in gücünü birleştirir. Gradle'ın ilk sürümü 2012'de piyasaya sürüldü. Hızlı bir şekilde benimsendi. Google şu anda Android işletim sistemi için kullanıyor.

Gradle, XML yerine Groovy dilini kullanır. Sonuç olarak, Gradle'da derleme komut dosyalarının yazılması ve okunması daha kolaydır. Başlangıçta bağımlılık yönetimi için Ivy kullanıyordu, ancak şimdi kendi bağımlılık motorunu kullanıyor.

Artıları

  • Esnek kalırken standardizasyon sağlar
  • Derleme komut dosyalarını okumak ve yazmak kolay
  • Birden çok bağımlılık sürümünü ele almada daha iyi
  • Birden fazla programlama dili ve teknolojisini kullanabilen
  • Aracı geliştirmeye yardımcı olan aktif topluluk
  • Gradle DSL (Etki Alanına Özgü Dil), yapılandırma yapısını basitleştirir
  • Gradle, aşamalı olarak, derleme önbelleği ve Gradle Daemon'u kullanarak performans iyileştirmeleri sağlar

Eksileri

  • IDE entegrasyonu Maven kadar iyi değil

Kepçe Örneği

Gradle'ı şuradan yükleyebilirsiniz: Burada . Gradle'ı yolunuza kurduktan sonra, şu şekilde kontrol edebilirsiniz:

$ kepçe--versiyon

-------------------------------------------------- ----------
kepçe4.5
-------------------------------------------------- ----------

Yapım Zamanı:2018-01-24 17: 04:52UTC
Revizyon: 77d0ec90636f43669dc794ca17ef80dd65457bec

Harika: 2.4.12
Karınca: Apaçi Karınca(ÇB)1.9.9 sürümü Şubat'ta derlendi2 2017
JVM: 1.8.0_74(Oracle Şirketi25.74-b02)
İşletim Sistemi: Mac OS X 10.11.6 x86_64

Ardından, aşağıdaki dizin yapısını oluşturun:

Selam Dünya
| -yapı.kepçe
``-kaynak
| -ana
``-java
``-Selam Dünya
``-Selam Dünya.java

Helloworld.java için Ant örneğindeki kodu girin. Ve build.gradle için aşağıdaki kodu girin:

eklentiyi uygula: 'java'

versiyon= '1.0'

depolar{
mavenCentral()
}

bağımlılıklar{
testDerleme grubu: 'junit', isim: 'junit', sürüm: '4.12'
}

Mevcut tüm komutlara bakmak için gradle görevleri –all komutunu kullanabilirsiniz. Gradle, build.gradle dosyasında belirttiğiniz eklentileri otomatik olarak alır ve eklentiler nedeniyle mevcut olan ekstra görevleri size gösterir.

Aşağıdakileri çalıştırarak yapıyı alabilirsiniz:

$ kepçe kavanozu

YAPI BAŞARILI 1 saniye içinde
2uygulanabilir görevler:2uygulanmış

Kavanozu şu şekilde çalıştırabilirsiniz:

$ java -cp derlemesi/libs/helloworld-1.0.kavanozSelam Dünya
Selam Dünya!

Jar dosyası build/libs klasörüne konur.

Çözüm

İnşa araçları arasında Ant, daha küçük projeler için faydalı olabilirken Maven, tüm geliştiricilerin aynı kurallara uymasını sağlamak için daha iyidir. Gradle, en fazla esnekliği sağlayan en yeni araçtır.

Referanslar: