Apache'nin neden yapı ve bağımlılık yönetimi için iki ayrı aracı var?


9

Apache'nin iki ayrı aracı vardır:

Her ikisi de aynı nişi dolduruyor gibi görünüyor. İki sorum var:

  1. İki araç arasındaki temel farklılıkların en önemli noktaları nelerdir ?
    • İkisi arasındaki farklar hakkında gerçekten uzun bir yazı yazılabileceğinden eminim, o kadar fazla detay aramıyorum, ne de diğerinden birini seçmek için öznel bir argüman arıyorum.
  2. Programlama tarihi - Apache'nin sonuçta amaca çok benzer iki tamamen ayrı araç seti oluşturmak için nasıl gelişti?

Yanıtlar:


7

İ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.xmlbiri 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.xmlgeliş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, javacher ş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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.