İki araç arasındaki temel farklılıkların en önemli noktaları nelerdir ?
Proje yapısı
Maven belirli bir proje yapısını tercih eder: Kişi Maven Way'i yapmaya karar vermelidir. Maven pom.xml
, normalde diğer tüm projeler tarafından devralınan bir kökte zaten yapılandırılmış ortak oluşturma adımlarıyla birlikte gelir pom.xml
.
Ant + Ivy daha açık uçlu: çok şey yapabilirken, proje yapısı veya senaryo kullanımı açısından sadece birkaç temel gereklilik var. Önceden belirlenmiş oluşturma görevleri, hedefleri veya süreçleri yoktur. Her build.xml
biri temiz bir sayfa (tabii ki başka bir komut dosyası içermedikçe).
Oryantasyon
Maven hedefe yöneliktir. Sen "yapı" ya da "dağıtmak" ve bunu sor "Bu yapı hedefi yürütme" deme Maven'in oraya için yapması gereken neyse yapar: söylediğin Ne yapmak istiyorsun.
Ant + Ivy görev odaklıdır. Her görev, uygulama tanımlı ve özeldir. İstediğini nasıl yapacağını söyle .
Bağımlılık Yönetimi
Maven, bağımlılıkları otomatik olarak ele almak için en iyi bilinir. Havuz URL'leri önceden doğru şekilde yapılandırıldığı sürece herhangi bir kullanıcı etkileşimi olmadan bina oluştururken doğru sürümleri indirecektir.
Ant'in "Java Classpath" dışında bağımlılık yönetimi yoktur. Ivy, Maven'den biraz daha sıkıcı ama yine de otomatik olan bağımlılık yönetimi ekliyor. Buradaki anahtar, bağımlılık yönetimi seçememenizdir (örn. "Dağıtımımdaki kavanozlar veya kaynak kontrolüne dahil edilen kavanozlar") veya Ivy aracılığıyla dış kaynaklardan yararlanabilirsiniz. Bu seçim, proje ihtiyaçlarını karşılamak için daha fazla esneklik anlamına gelir.
Kullanım kolaylığı
Maven (teoride) kullanımı kolaydır. Herhangi bir geliştirici bir Maven projesi alabilir ve tüm proje kaynaklarının nerede olduğunu ve ne için olduğunu hemen öğrenebilir: bunun nedeni Maven'in belirli bir şey yapmanın ilk yoludur.
Ant + Ivy daha dik bir öğrenme eğrisine sahip olabilir, çünkü her proje farklı olabilir . Farklı projelerin aynı hedeflere ulaşmak için farklı yolları olabilir.
uzayabilirlik
Maven, eklentilerin yazılmasına ve oluşturma sürecinin değiştirilmesine izin verir. Bununla birlikte, pom.xml
geliştiricileri önceden belirlenmiş inşa süreçlerine doğru iten bir kök ile kutudan çıkar . Yeni hedefler veya inşa adımları, dikkatli bir düşünce ve inşa sürecine enjekte etmek için ekstra çaba gerektirir.
Ant + Ivy ayrıca eklentiler ve yeni görevler yazmanıza izin verir: bunu yapmak oldukça kolaydır ve kişi yeni bir görevi minimum çaba ile entegre edebilir. Birinin yeni görevini karıştırmak veya entegre etmek için önceden belirlenmiş bir hedef veya hedef yoktur.
Apache'nin nihayetinde amaca çok benzer iki tamamen ayrı araç seti oluşturmak için nasıl gelişti?
Anlaşılması gereken ilk şey, Apache projesinin altında ayrı, bağımsız projelerin çalıştığı bir şemsiye olmaktan başka bir şey olmadığıdır. Farklı ekipler farklı projelerde çalışır. Bireysel geliştiriciler birden fazla proje üzerinde çalışabilirken, Ant, Ivy ve Maven'i içeren genel bir yol haritası yoktur.
Karınca önce geldi. Make'in Java eşdeğeri olacak şekilde tasarlanmıştır. Make, Java projeleri oluşturabilirken sıkıcıdır: Bir sürü derleme birimini ayrı ayrı derlemek ve bunları bağlamak için var olun. Java yolu, javac
her şeyi bir seferde derler ve "bağlantı" dediğimiz şey, çalışma zamanında JVM'nin bağırsaklarında gerçekten gerçekleşir. Make, iş için doğru araç değildi: Java için Makefile temel olarak bir veya iki hedeftir ( javac
, jar
).
Ant, Make'ın üzerine biraz yapı ekledi, ancak süreci temelden değiştirmedi.
Bir süre sonra topluluk, jar dosyalarını avlamanın eğlenceli olmadığını fark etti. Ayrıca, proje oluşturmanın standart bir yolu yoktu. Tutarlılık olmadan, Java geliştirme bir karışıklık oldu. Maven bu sorunları çözmek için tasarlandı: ortak bir proje yapısı getirecek ve kavanoz dosyalarının avlanmasını otomatik hale getirecekti.
Ancak Ant hala gerçekten faydalıydı. Bazı projeler kendilerini Ant'in süreçlerinin geçici doğasına daha fazla borçludur. Bazı projeler kod derlemiyor. Bazı projeler eskiydi ve herkesin bunları Maven'e "yükseltmesi" pek mümkün değildi.
Ivy ile birlikte: Ant'e bağımlılık yönetimi ekleyerek projelere her iki dünyanın da en iyisini verir. Eski komut dosyalarınızı veya yüksek düzeyde özelleştirilmiş ortamınızı koruyabilir, ancak Maven'in en önemli özelliğini kazanabilirsiniz: bağımlılık yönetimi.