Java’da Bir Build Otomasyonu: Yeni Başlayanlar İçin Maven

Java’da Bir Build Otomasyonu: Yeni Başlayanlar İçin Maven

Apache Maven çıkış noktası build işlemlerini sadeleştirmek olan bir build otomasyon aracıdır.

Maven build, reporting, dependency management ve documentation işlemlerini gerçekleştirir.

Build  işleminin iki yönünü ele alır: projenin nasıl build olacağını ve projenin dependency’lerini tanımlar. Build işlemi için kendisinden  önceki araçların aksine kabul edilen bir düzen kullanır ve sadece  istisnaların yazılması gerekir.

Dependency  management olarak Maven library ulaşmak için sırasıyla bulana kadar  local, central ve uzak depolara bakar, indirilmesi gerekiyorsa indirir.  Bu mekanizma sayesinde geliştiriciyi büyük bir iş yükünden kurtarır.

Konfigrasyon için pom.xml dosyasını kullanır. Bu dosya projeyi build etmek için gerekli bütün bilgileri içerir.

Maven başlıca Java projeleri için kullanılsa da C#, Ruby, Scala gibi farklı diller için de kullanılabilir.

Maven ne işe yarar?

Maven’ın asıl amacı geliştirme sürecini en kısa zamana düşürmektir. Bu amaca ulaşmak için Maven bir kaç alanla ilgilenir:

  • Build işlemini kolaylaştırmak
  • Sabit bir build sistemi sağlamak
  • Kaliteli proje bilgisi sağlamak
  • En iyi uygulamayı geliştirmek için kurallar sağlamak
  • Yeni özelliklere geçişi kolaylaştırmak

POM nedir?

Project  Object Model ya da POM, Maven’ın en önemli parçalarından biridir. Proje  hakkında build işlemi için gerekli bilgileri ve konfigrasyon detaylarını içeren bir XML doyasıdır. Maven bir görevi yerine getirmeden önce, ilk olarak çalışma dizininde POM’u bulur ve gerekli bilgileri  okur.

pom.xml hakkında daha detaylı bilgiye bu linkten ulaşabilirsiniz.


Maven nasıl çalışır?

Maven’ın üç build yaşam döngüsü vardır:

build(default)

build yaşam döngüsünü ifade eder.

  • validate: Projenin doğruluğunu ve gerekli bilgilerin mümkünlüğünü kontrol eder.
  • compile: Kaynak kodu derler.
  • test: Derlenmiş koda uygun bir unit test ile test eder.
  • package: Derlenmiş kodu paketler.
  • verify: Entegrasyon teslerinin sonuçlarını kontrol ederek kalite kriterine ulaşıldığından emin olur.
  • install: Diğer projelerde dependency olarak kullanmak için paketleri local depoya yükler.
  • deploy: Final paketi uzak depoya yükler.

clean

build işlemi sonucundan üretilenleri siler

  • pre-clean: Temizlik öncesi gerekli olan prosesleri çalıştırır
  • clean: Önceki build işlemi sonucu oluşan dosyaları siler
  • post-clean: Temizlik işlemini bitirmek için gerekli olan prosesleri çalıştırır

site

dokümantasyon oluşturur

  • pre-site: Site oluşturma öncesi gerekli olan prosesleri çalıştırır
  • site: Projenin site dökümantasyonunu oluşturur
  • post-site: Site oluşturma işlemini bitirmek için gerekli olan prosesleri çalıştırır
  • site-deploy: Üretilen siteyi belirtilen web sunucusuna yerleştirir

Örnek Proje

Kurulum

Bu rehberde java’nın yüklü ve çalışır durumda olduğu kabul edilmektedir.

Öncelikle, Maven indirme sayfasından binary zip arşivini istediğiniz bir dizine indirin ve takip eden komutu çalıştırın:

unzip apache-maven-a.b.c-bin.zip

Çıkarma  işlemi başarılı bir şekilde gerçekleştikten sonra, Maven dizinini çalıştırılabilir dosyaların arandığı dizinlerin yolunu gösteren PATH değişkenine eklemek için takip eden komutu çalıştırın:

PATH=$PATH:$(pwd)/apache-maven-a.b.c/bin

Bu işlem kalıcı bir çözüm değildir, kalıcı olmasını istiyorsanız home dizininizde bulunan .bashrc dosyasına bu işlemi gerçekleştirecek bir satır eklemeniz gerekmektedir.

Bu  işlemleri gerçekleştirdikten sonra kurulum işleminin başarılı bir şekilde tamamlandığını doğrulamak için takip eden komutu çalıştırın:

mvn --version

Eğer işlemler başarılı bir şekilde tamamlandıysa aşağıdakine benzer bir çıktı vermesi beklenmektedir:

Maven home: /home/user/maven-home/apache-maven-3.5.3
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-oracle/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.15.0-22-generic", arch: "amd64", family: "unix"

Proje oluşturma

Projenizi oluşturmak istediğiniz dizine geçin ve projeyi oluşturmak için takip eden komutu çalıştırın:

mvn archetype:generate \
-DgroupId=com.mycompany.app \
-DartifactId=my-app \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false

Bu komut çıktı olarak artifactId’ye verilenle aynı adda bir dizin oluşturur.

Bu komutu basit bir şekilde açıklamak gerekirse; basit bir proje iskeleti oluşturmamızı sağlayan template yapısını archetype ifade eder, diğer parametreler ise bu yapıyı oluştururken kullanılacak bilgilerdir.

Oluşan dizine geçmek için takip eden komutu çalıştırın:

cd my-app

Bu dizinin altında aşağıdaki standart proje yapısını göreceksiniz.

my-app
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── mycompany
    │               └── app
    └── test
        └── java
            └── com
                └── mycompany
                    └── app

src/main/java dizininde projenin kaynak kodu, src/test/java dizininde projenin test kodu bulunmaktadır pom.xml dosyası ise projenin POM’udur.

pom.xml

Bu  dosyanın içiriğini incelerseniz projeyi oluşturma kısmında verilen parametrelere uygun bir şekilde doldurulduğunu göreceksiniz.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

<groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>

<name>my-app</name>
  <url>http://maven.apache.org</url>

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Projeyi build etmek

Projeyi build etmek için takip eden komutu çalıştırın:

mvn package

Bu komut sırasıyla aşağıdaki işlemleri gerçekleştirip target dizini altına bir jar dosyası oluşturacaktır.

default-resources
default-compile
default-testResources
default-testCompile
default-test

Derlenip, paketlenen jar dosyasını denemek için takip eden komutu çalıştırın:

java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App

Bu komut aşağıdaki çıktıyı verecektir.

Hello World!