• Çar. Tem 6th, 2022

Maven Yazıları 2 – Project Object Model, Build Lifecycle ,Build Profiles

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. Şu ş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

Not: Yazının kapak görseli https://unixcop.com/wp-content/uploads/2021/04/Apache-maven.jpg adresinden alınmıştır.

Merhaba! Ben İlkay Günel :) İstanbul Üniversitesi Bilgisayar Mühendisliği 2016 mezunuyum. Güncel olarak Paycore'da SoftPOS projesinde Java Developer olarak çalışmaktayım. Büyük oranda Java teknolojileri ile uğraşıp kendimi geliştirmeye çalışıyorum ve bu mecrada öğrendiklerimi sizle paylaşmaya da çabalıyorum :) Hakkımda biraz daha detaylı bilgi için: http://www.ilkaygunel.com/about/

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir