Merhabalar arkadaşlar. Maven Giriş yazımızda basitçe Maven’a giriş yapmıştık. Bu yazımızda da konumuz Project Object Model, Build Lifecycle ve Build Profiles konularını anlamak olacak.

Project Object Model

Her bir maven projesi kendi içerisinde kendine has konfigürasyon ve özelliklerin tanımlandığı bir pom.xml dosyası barındırır. Project Object Model ifadesinin kısaltması ile isimlendirilen bu xml dosyası proje organizasyonu, lisanslar, bağımlılıklar, path ayarları gibi bilgileri içerir.

Bir pom.xml dosyası Apache 3 CookBook kitabında şu şekilde tasvir edilmiştir:

Yukarıdaki ekran görüntüsünden de görebileceğiniz gibi bir pom.xml dosyası yapısal olarak 4 alana ayrılır. Şe şekilde:

  • The Basics: Project co-ordinates,bağımlılık yönetimi ve miras alma detaylarını barındıran kısımdır. Project co-ordinates ifadesinden kastedilen bilgi de groupId, artifactId ve version bilgilerinin toplandığı kümedir. Bir pom.xml dosyası bu üç bilgiyisi dolayısı ile Project co-ordinates kümesini barındırmak zorundadır. Basics alanı ayrıca modül ve project level bilgileri de barındırabilir.
  • Build Settings: Projenin inşa (build) aşaması içindeki ayarların tanımlandığı kısımdır.
  • Project Metadata: Bu alan projeye özel bilgilerin tanımlandığı alandır. Projenin ismi, açıklması, geliştiricileri ve katkı sağlayıcıları gibi bilgiler bu alanda yer alır.
  • Environment: Versiyon kontrol sistemi, issue yönetimi, continuous integration, mail listesi, repository’ler gibi environment bilgileri de bu alanda yer alır.

Build Lifecycle

Build Lifecycle konusu hoş bir tabir ile Maven projelerinin kalbi olarak nitelendirilir. Çünkü projenin inşası, testi, dağıtımı ile ilgili işlemler Build Lifecycle içerisinde yer alır. Maven içerisinde 3 adet Build Lifecycle yer alır: Default, Clean ve **Site*.

Default Lifecycle: Projenin derlenmesi, testi ve deoploy edilmesi olaylarını kapsayan lifecycle’dır. 20’den fazla build phase içerisinde yer alır. En önemlileri şunlardır

  • Validate: Projenin bilgilerinin eksik olup olmadığı ve doğru olup olmadığı kontrolleri yapılır.
  • Compile: Kaynak kodları derler.
  • Test: Unit Test kodlarını koşturur.
  • Package: Derlenmiş kodu paketleme formatına uygun olarak paketler.
  • Integration-test: Entegrasyon testlerinin uygulanması aşamasıdır.
  • Verify: Package’ın geçerli olup olmadığını kontrol eder.
  • Install: Oluşturulan paketin lokal repo’ya kurar.
  • Deploy: Uzak sunucuya paketin kurulumunu gerçekleştirir.

Biz bir build phase’i çalıştırdığımız zaman ondan önce çalışması gereken build phase’ler de maven tarafından çalışıtırırlar. Örneğin mvn integration-test komutu verildiği zaman Maven gidip validate, compile, test, ve package build phase’lerini çalıştıracak, ardından mvn integration-test komutunu çalıştıracaktır.

Clean Lifecycle: Clean lifecycle projenin clean edilmesi yani derlenmiş dosyaların target altından silinerek yeni derlenmiş dosyalara zemin hazırlması görevini üstlenir. Ayrıca

  • Pre-clean: Clean işleminden önce yapılması gerekenleri tanımlar.
  • Clean: Önceki build işleminden gelen derlenmiş dosyaları siler.
  • Post-clean: Clean işleminin bitirilmesi için yapılması gereken adımları tanımlar.

Site lifecycle: Bu konu benim anladığım kadarı ile Maven tabanlı yazmış olduğunuz projeniz için bir web sayfası şeklinde dökümantasyonunun oluşturulması ve deploy edilmesi aşamasındaki işlemleri belirler.

  • Pre-site: Web sayfası oluşturulmadan önceki aşamaları kapsar.
  • Site: Web sayfası halinde olacak olan dökümanın oluşturulması işlemini yapar.
  • Post-site: Site’ın tamamlanması için yapılmasıgerekenleri uygular ve deploy için hazır hale getirir.
  • Site-deploy: Tanımlanmış olan bir web sunucusuna oluşturulan bu dökümanın deploy işlemini yapar.

Build Profiles

Maven’ın sağlamayı amaçladığı büyük şeylerden birisi de projenin tamamı ile portable olmasıdır. Fakat Apache’nin kendisinin de dediği gibi %100 bir portability çok zordur. Örneğin kullanılan bir plugin portability konusunu zora sokabilir.

Benim bu yazıda anlatacaklarım bu kadar arkadaşlar. Gelecek yazıda Maven tabanlı bir Java Web projesi oluşturacağız ve sunucu üzerinde çalıştıracağız.

Görüşene kadar sağlıcakla kalın.

Selam ve Sevgilerimle