Apaçi Maven - Apache Maven

Apaçi Maven'i
Apache Maven logosu.svg
Geliştirici(ler) Apache Yazılım Vakfı
İlk sürüm 13 Temmuz 2004 ; 17 yıl önce ( 2004-07-13 )
kararlı sürüm
3.8.3 / 27 Eylül 2021 ; 14 gün önce ( 2021-09-27 )
depo Maven Deposu
Yazılmış Java
Tip Yapı aracı
Lisans Apache Lisansı 2.0
İnternet sitesi maven .apache .org

Maven , öncelikle Java projeleri için kullanılan bir yapı otomasyon aracıdır . Maven ayrıca C# , Ruby , Scala ve diğer dillerde yazılmış projeleri oluşturmak ve yönetmek için de kullanılabilir . Maven projesi, daha önce Jakarta Projesinin bir parçası olduğu Apache Yazılım Vakfı tarafından barındırılıyor .

Maven adresleri iki bina yazılım yönleri: yazılım nasıl inşa ve bağlı gelişmeler. Apache Ant gibi önceki araçların aksine , derleme prosedürü için kuralları kullanır. Yalnızca istisnaların belirtilmesi gerekir. Bir XML dosyası, oluşturulmakta olan yazılım projesini, diğer harici modüllere ve bileşenlere olan bağımlılıklarını, yapı sırasını, dizinleri ve gerekli eklentileri açıklar . Kodun derlenmesi ve paketlenmesi gibi belirli iyi tanımlanmış görevleri gerçekleştirmek için önceden tanımlanmış hedeflerle birlikte gelir. Maven, Java kitaplıklarını ve Maven eklentilerini Maven 2 Central Repository gibi bir veya daha fazla depodan dinamik olarak indirir ve bunları yerel bir önbellekte saklar. İndirilen eserlerin bu yerel önbelleği, yerel projeler tarafından oluşturulan eserler ile de güncellenebilir. Genel depolar da güncellenebilir.

Maven, standart girdi yoluyla kontrol edilebilen herhangi bir uygulamayı kullanmasına izin veren eklenti tabanlı bir mimari kullanılarak oluşturulmuştur. Maven 2 için bir C / C++ yerel eklentisi korunur.

Gibi alternatif teknolojiler Gradle ve sbt inşa araçları gibi güvenmeyin XML , ama Maven'in tanıtıldı temel kavramları tutun. Apache Ivy ile Maven depolarını da destekleyen özel bir bağımlılık yöneticisi geliştirildi.

Apache Maven, yeniden üretilebilir yapılar için desteğe sahiptir .

Tarih

Maven'in merkezi deposundaki eserlerin sayısı hızla arttı

Jason van Zyl tarafından oluşturulan Maven, 2002 yılında Apache Turbine'nin bir alt projesi olarak başladı . 2003 yılında oylandı ve üst düzey bir Apache Software Foundation projesi olarak kabul edildi . Temmuz 2004'te Maven'in piyasaya sürülmesi kritik ilk dönüm noktası olan v1.0 idi. Maven 2, beta döngülerinde yaklaşık altı ay sonra Ekim 2005'te v2.0 olarak ilan edildi. Maven 3.0, Ekim 2010'da piyasaya sürüldü ve çoğunlukla Maven 2 ile geriye dönük olarak uyumluydu.

Maven 3.0 bilgileri 2008'de yayılmaya başladı. Sekiz alfa sürümünden sonra, Maven 3.0'ın ilk beta sürümü Nisan 2010'da yayınlandı. Maven 3.0, çekirdek Proje Oluşturucu altyapısını elden geçirdi, bu da POM'un dosya tabanlı gösteriminin kendi girişinden ayrılmasıyla sonuçlandı. bellek nesnesi gösterimi. Bu, Maven 3.0 eklentilerinin XML tabanlı olmayan proje tanım dosyalarından yararlanma olasılığını genişletti. Önerilen diller arasında Ruby (zaten Jason van Zyl tarafından özel prototipte), YAML ve Groovy bulunur .

Maven 3'ün Maven 2'ye geriye dönük uyumluluğunu sağlamaya özel önem verildi. Çoğu proje için Maven 3'e yükseltme, proje yapısında herhangi bir ayarlama gerektirmeyecektir. Maven 3'ün ilk beta sürümü, çok çekirdekli bir makinede yapılandırılabilir sayıda çekirdekten yararlanan ve özellikle büyük çok modüllü projeler için uygun olan bir paralel yapı özelliğinin tanıtımını gördü.

Sözdizimi

Maven tarafından otomatik olarak oluşturulan bir Java projesi için bir dizin yapısı

Maven projeleri, bir -dosyasında depolanan bir Proje Nesne Modeli (POM) kullanılarak yapılandırılır pom.xml. Örnek bir dosya şöyle görünür:

<project>
  <!-- model version is always 4.0.0 for Maven 2.x POMs -->
  <modelVersion>4.0.0</modelVersion>
  <!-- project coordinates, i.e. a group of values which uniquely identify this project -->
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0</version>
  <!-- library dependencies -->
  <dependencies>
    <dependency>
      <!-- coordinates of the required library -->
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <!-- this dependency is only used for running and compiling tests -->
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Bu POM, yalnızca proje ( koordinatlar ) için benzersiz bir tanımlayıcı ve bunun JUnit çerçevesine bağımlılığını tanımlar . Ancak bu, projeyi oluşturmak ve projeyle ilişkili birim testlerini çalıştırmak için zaten yeterlidir . Maven bunu, Konfigürasyon Üzerinden Konvansiyon fikrini benimseyerek başarır , yani Maven, projenin konfigürasyonu için varsayılan değerler sağlar.

Normal bir deyimsel Maven projesinin dizin yapısı aşağıdaki dizin girişlerine sahiptir:

dizin adı Amaç
proje evi pom.xml ve tüm alt dizinleri içerir.
kaynak/ana/java Proje için teslim edilebilir Java kaynak kodunu içerir.
kaynak/ana/kaynaklar Özellik dosyaları gibi proje için teslim edilebilir kaynakları içerir.
kaynak/test/java Proje için test edilen Java kaynak kodunu (örneğin JUnit veya TestNG test senaryoları) içerir.
kaynak/test/kaynaklar Test için gerekli kaynakları içerir.

Komut mvn package, tüm Java dosyalarını derleyecek, herhangi bir testi çalıştıracak ve teslim edilebilir kodu ve kaynakları paketleyecektir target/my-app-1.0.jar(artifactId'nin benim uygulamam ve sürümün 1.0 olduğu varsayılarak).

Maven'i kullanarak kullanıcı yalnızca proje için yapılandırma sağlarken, yapılandırılabilir eklentiler projeyi derleme, hedef dizinleri temizleme, birim testleri çalıştırma, API belgeleri oluşturma vb. asıl işi yapar. Genel olarak, kullanıcıların eklentileri kendilerinin yazması gerekmemelidir. Bunu, yukarıda belirtilen görevleri yapmak için zorunlu prosedürlerin yazıldığı Ant ve make ile karşılaştırın .

Tasarım

Proje Nesne Modeli

Bir Proje Nesne Modeli (POM), tek bir proje için tüm konfigürasyonu sağlar. Genel konfigürasyon, projenin adını, sahibini ve diğer projelere olan bağımlılıklarını kapsar. Eklentiler olarak uygulanan derleme sürecinin bireysel aşamaları da yapılandırılabilir . Örneğin, derleyici eklentisini derleme için Java sürüm 1.5'i kullanacak şekilde yapılandırabilir veya bazı birim testleri başarısız olsa bile projeyi paketlemeyi belirtebilirsiniz.

Daha büyük projeler, her biri kendi POM'una sahip birkaç modüle veya alt projelere bölünmelidir. Daha sonra, tüm modüllerin tek bir komutla derlenebileceği bir kök POM yazılabilir. POM'lar, yapılandırmayı diğer POM'lardan da devralabilir. Tüm POM'lar varsayılan olarak Süper POM'dan devralır. Super POM, varsayılan kaynak dizinleri, varsayılan eklentiler vb. gibi varsayılan yapılandırma sağlar.

Eklentiler

Maven'in işlevselliğinin çoğu eklentilerdedir . Bir eklenti, komut kullanılarak yürütülebilecek bir dizi hedef sağlar mvn [plugin-name]:[goal-name]. Örneğin, bir Java projesi çalıştırılarak derleyici eklentisinin derleme hedefiyle derlenebilir mvn compiler:compile.

Oluşturma, test etme, kaynak kontrol yönetimi, bir web sunucusu çalıştırma, Eclipse proje dosyaları oluşturma ve çok daha fazlası için Maven eklentileri vardır . Eklentiler, bir pom.xmldosyanın <eklentiler> bölümünde tanıtılır ve yapılandırılır . Bazı temel eklentiler varsayılan olarak her projeye dahil edilmiştir ve bunların makul varsayılan ayarları vardır.

Bununla birlikte, ilgili her bir hedefi manuel olarak çalıştırmak için gereken bir yazılım projesinin oluşturulması, test edilmesi ve paketlenmesinden oluşan arketipsel inşa sırası zahmetli olacaktır:

  • mvn compiler:compile
  • mvn surefire:test
  • mvn jar:jar

Maven'in yaşam döngüsü konsepti bu sorunu ele alır.

Eklentiler, Maven'i genişletmenin birincil yoludur. Maven eklentisi geliştirmek, org.apache.maven.plugin.AbstractMojo sınıfını genişleterek yapılabilir. Bir uygulama sunucusu çalıştıran bulut tabanlı bir sanal makine oluşturmak için bir Maven eklentisi için örnek kod ve açıklama , Bulut sanal makinelerinin geliştirilmesini ve yönetimini otomatikleştirme makalesinde verilmiştir .

Yaşam döngüleri oluşturun

Derleme yaşam döngüsü, hedef yürütmeye sipariş vermek için kullanılabilecek adlandırılmış aşamaların bir listesidir . Maven'in standart yaşam döngülerinden biri, bu sırayla aşağıdaki aşamaları içeren varsayılan yaşam döngüsüdür :

  • doğrulamak
  • üretmek-kaynaklar
  • süreç kaynakları
  • kaynak yaratmak
  • süreç kaynakları
  • derlemek
  • süreç-test-kaynakları
  • süreç-test-kaynakları
  • test derlemesi
  • Ölçek
  • paket
  • Yüklemek
  • dağıtmak

Eklentiler tarafından sağlanan hedefler, yaşam döngüsünün farklı aşamalarıyla ilişkilendirilebilir. Örneğin, varsayılan olarak, "derleyici: derleme" hedefi "derleme" aşamasıyla ilişkilendirilirken, "surefire: test" hedefi "test" aşamasıyla ilişkilendirilir. Ne zaman mvn testkomut yürütülür, Maven fazların her birine ve "test" aşaması da dahil olmak ilişkili tüm hedeflere çalışır. Böyle bir durumda Maven, "süreç-kaynaklar" aşamasıyla ilişkili "kaynaklar: kaynaklar" hedefini, ardından "derleyici: derleme" ve sonunda "kesin ateş: test" hedefini çalıştırana kadar çalıştırır.

Maven ayrıca projeyi temizlemek ve bir proje sahası oluşturmak için standart aşamalara sahiptir. Temizleme varsayılan yaşam döngüsünün bir parçası olsaydı, proje her oluşturulduğunda temizlenir. Bu açıkça istenmeyen bir durumdur, bu nedenle temizliğe kendi yaşam döngüsü verilmiştir.

Standart yaşam döngüleri, bir projede yeni olan kullanıcıların tek bir komut vererek her Maven projesini doğru bir şekilde oluşturma, test etme ve kurma becerisini sağlar mvn install. Varsayılan olarak Maven, POM dosyasını oluşturulan JAR ve WAR dosyalarında paketler. diet4j gibi araçlar, tüm proje kodunu içeren bir "uber"-jar gerektirmeden Maven modüllerini tekrar tekrar çözmek ve çalıştırmak için bu bilgiyi kullanabilir.

bağımlılıklar

Maven'deki merkezi bir özellik bağımlılık yönetimidir . Maven'in bağımlılık işleme mekanizması, yazılım kitaplıkları veya modüller gibi bireysel yapıları tanımlayan bir koordinat sistemi etrafında düzenlenmiştir. Yukarıdaki POM örneği, projenin doğrudan bağımlılığı olarak JUnit koordinatlarına atıfta bulunur. Örneğin, Hazırda Bekletme kitaplığına ihtiyaç duyan bir projenin, Hazırda Bekletme'nin proje koordinatlarını POM'unda bildirmesi yeterlidir. Maven, Hibernate'in ihtiyaç duyduğu bağımlılığı ve bağımlılıkları ( geçişli bağımlılıklar olarak adlandırılır ) otomatik olarak indirir ve bunları kullanıcının yerel deposunda saklar. Maven 2 Central Repository varsayılan olarak kitaplıkları aramak için kullanılır, ancak POM içinde kullanılacak havuzlar (örneğin şirket-özel havuzlar) yapılandırılabilir.

Maven ve Ant arasındaki temel fark, Maven'in tasarımının tüm projeleri belirli bir yapıya ve bir dizi desteklenen görev iş akışına sahip olarak görmesidir (örneğin, kaynak kontrolünden kaynak alma, projeyi derleme, birim testi, vb.). Çoğu yazılım projesi aslında bu işlemleri desteklerken ve aslında iyi tanımlanmış bir yapıya sahipken, Maven bu yapının ve işlem uygulama detaylarının POM dosyasında tanımlanmasını gerektirir. Bu nedenle Maven, projelerin nasıl tanımlanacağına ve genellikle tüm projelerde desteklenen iş akışlarının listesine ilişkin bir sözleşmeye dayanır .

Farklı açık kaynaklı kütüphaneler ve çerçeveler için koordinatları bulmak için kullanılabilecek The Central Repository Search Engine gibi arama motorları vardır.

Tek bir makinede geliştirilen projeler, yerel depo aracılığıyla birbirine bağlı olabilir. Yerel depo, hem indirilen bağımlılıklar için bir önbellek hem de yerel olarak oluşturulmuş yapılar için merkezi bir depolama yeri işlevi gören basit bir klasör yapısıdır. Maven komutu mvn installbir proje oluşturur ve ikili dosyalarını yerel depoya yerleştirir. Daha sonra diğer projeler kendi POM'larında koordinatlarını belirterek bu projeyi kullanabilirler.

birlikte çalışabilirlik

Java programlama dilini hedefleyen birkaç popüler entegre geliştirme ortamına (IDE) eklentiler , Maven'in IDE'nin yapı mekanizması ve kaynak düzenleme araçlarıyla entegrasyonunu sağlamak için mevcuttur, bu da Maven'in projeleri IDE içinden derlemesine ve ayrıca sınıf yolunu belirlemesine olanak tanır. kod tamamlama, derleyici hatalarını vurgulama vb.

Maven ile geliştirmeyi destekleyen popüler IDE örnekleri şunları içerir:

Bu eklentiler ayrıca POM'u düzenleme veya bir projenin tam bağımlılık setini doğrudan IDE içinde belirlemek için POM'u kullanma olanağı sağlar.

IDE artık derleme yapmadığında IDE'lerin bazı yerleşik özellikleri kaybedilir. Örneğin, Eclipse'in JDT'si, düzenlendikten sonra tek bir Java kaynak dosyasını yeniden derleme yeteneğine sahiptir. Birçok IDE, Maven tarafından tercih edilen klasör hiyerarşisi yerine düz bir proje kümesiyle çalışır. Bu, Maven kullanılırken IDE'lerde SCM sistemlerinin kullanımını karmaşıklaştırır .

Ayrıca bakınız

Referanslar

daha fazla okuma

Dış bağlantılar