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:
- Apaçi Karıncası ile birlikte Sarmaşık
- Uzman
- kepçe
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ümApaç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:
Ve aynı helloworld klasöründe, aşağıdaki kodla ivy.xml dosyasını oluşturun:
>
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ıncakavanozBaşarılı bir derleme şöyle bir çıktı sağlamalıdır:
$ karınca kavanozuYapı 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ünyaSelam 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ümApaç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:
XMLSchema örneği'
xsi:şemaKonum='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd'>
>
>
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.UygulamaSelam 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 kavanozuYAPI 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ünyaSelam 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:
- http://ant.apache.org/
- http://ant.apache.org/ivy/
- https://maven.apache.org/
- https://gradle.org/
- http://makble.com/gradle-junit-helloworld-example
- https://examples.javacodegeeks.com/core-java/gradle/gradle-hello-world-tutorial/
- https://gradle.org/maven-vs-gradle/
- https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
- https://stackoverflow.com/questions/20755437/java-build-tools-ant-vs-maven
- https://technologyconversations.com/2014/06/18/build-tools/
- https://www.quora.com/What-are-the-pros-and-cons-of-Maven-versus-Ant-as-building-tools-for-Java