Takip et

Exec Maven Plugin: Maven Build Sürecinde Java Programlarını Çalıştırma Rehberi

Exec Maven Plugin: Maven Build Sürecinde Java Programlarını Çalıştırma Rehberi Maven, Java projeleri için endüstri standardı bir build otom

Exec Maven Plugin: Maven Build Sürecinde Java Programlarını Çalıştırma Rehberi

Maven, Java projeleri için endüstri standardı bir build otomasyon aracıdır. Bağımlılık yönetimi, derleme, test etme, paketleme ve dağıtma gibi birçok görevi standartlaştırılmış bir şekilde ele alır. Ancak Maven’ın gerçek gücü, “plugin” adı verilen genişletilebilir mimarisinde yatar. Plugin’ler, Maven’ın çekirdek yeteneklerini genişletir ve geliştiricilere projelerinin yaşam döngüsü boyunca çeşitli özel görevleri yerine getirme imkanı sunar. Bu makalede, Maven’ın en kullanışlı plugin’lerinden biri olan “Exec Maven Plugin”i derinlemesine inceleyeceğiz. Bu plugin, Maven build sürecinin herhangi bir aşamasında Java programlarını veya harici komutları çalıştırmak için tasarlanmıştır.

Maven ve Plugin Mekanizması

Maven, proje yönetimini ve build sürecini basitleştirmek için “Project Object Model” (POM) adı verilen XML tabanlı bir yapı kullanır. POM dosyası (pom.xml), projenin tüm konfigürasyonunu, bağımlılıklarını, plugin’lerini ve build profilini tanımlar. Maven’ın çalışma prensibi, bir yaşam döngüsü (lifecycle) etrafında döner. Bu yaşam döngüsü, validate, compile, test, package, install, deploy gibi önceden tanımlanmış aşamalardan (phases) oluşur.

Plugin’ler, Maven’ın bu yaşam döngüsüne entegre olan ve belirli görevleri (goals) yerine getiren modüler bileşenlerdir. Her plugin, bir veya daha fazla “goal” içerir. Örneğin, maven-compiler-plugin‘in compile goal’ü, Java kaynak kodunu derler. Bu goal, genellikle compile yaşam döngüsü fazına bağlanır. Geliştiriciler, pom.xml dosyasında plugin’leri tanımlayarak ve onları belirli yaşam döngüsü fazlarına bağlayarak build sürecini özelleştirebilirler. Bir plugin’i kullanmak için, genellikle etiketinin altında bölümüne eklenir ve etiketi altında çeşitli parametrelerle ayarlanır.

Exec Maven Plugin de bu mekanizmanın bir parçasıdır. Temel amacı, Maven’ın kontrolü altında harici programları çalıştırmaktır. Bu programlar bir Java sınıfı olabileceği gibi, bir shell scripti, Python scripti veya herhangi bir yürütülebilir dosya da olabilir. Bu esneklik, geliştiricilere build sürecine özel otomasyon adımları eklemeleri için güçlü bir araç sunar.

Exec Maven Plugin’e Giriş

Exec Maven Plugin, Maven build sürecinden bağımsız Java uygulamalarını veya harici sistem komutlarını çalıştırmak için tasarlanmıştır. Bu, özellikle aşağıdaki senaryolarda son derece faydalıdır:

* Ana Uygulamayı Çalıştırma: Bir Maven projesinin ana Java sınıfını doğrudan Maven komutuyla çalıştırmak.
* Yardımcı Programlar ve Scriptler: Build sürecinin bir parçası olarak veritabanı migrasyonları, kod üretimi, dosya işleme gibi yardımcı scriptleri veya programları çalıştırmak.
* Entegrasyon Testleri: Entegrasyon testlerinden önce bir test sunucusu başlatmak veya test verilerini hazırlamak.
* Özel Build Adımları: Maven’ın standart yaşam döngüsüne uymayan özel adımları entegre etmek.

Exec Maven Plugin’i projenize eklemek için pom.xml dosyanızın bölümüne aşağıdaki gibi bir girişi eklemeniz gerekir:


    
        
            org.codehaus.mojo
            exec-maven-plugin
            3.1.1 
            
                
                
                    
                        java
                    
                
            
            
                
            
        
    

Yukarıdaki örnekte, groupId, artifactId ve version ile plugin’i tanımladık. bölümü, plugin’in belirli bir Maven yaşam döngüsü fazında çalıştırılmasını sağlar, ancak bu isteğe bağlıdır. Genellikle, plugin’i doğrudan komut satırından çalıştırmak için bu bölüm gerekli değildir. etiketi ise plugin’in davranışını özelleştirmek için kullanılır.

Exec Maven Plugin’in iki ana goal’ü vardır:

1. java goal’ü: Bir Java sınıfını ayrı bir JVM sürecinde çalıştırmak için kullanılır. Bu goal, genellikle projenin kendi Java sınıflarını veya bağımlılıklarındaki sınıfları çalıştırmak için tercih edilir. Classpath yönetimi Maven tarafından otomatik olarak yapılır.
2. exec goal’ü: Herhangi bir harici programı veya scripti çalıştırmak için kullanılır. Bu, java komutu, sh scriptleri, python programları veya herhangi bir yürütülebilir dosya olabilir. Classpath yönetimi genellikle manuel olarak veya harici programın kendi mekanizmalarıyla yapılır.

Farklı Çalıştırma Senaryoları ve Konfigürasyonlar

Exec Maven Plugin, çeşitli senaryolara uyacak şekilde zengin konfigürasyon seçenekleri sunar. Şimdi bu senaryoları ve ilgili konfigürasyonları detaylıca inceleyelim.

Tek Bir Java Sınıfını Çalıştırma (java goal’ü)

Exec Maven Plugin’in java goal’ü, projenizin veya bağımlılıklarınızın classpath’ında bulunan bir Java sınıfını çalıştırmanın en basit yoludur. Bu, genellikle projenizin ana uygulamasını başlatmak veya küçük bir yardımcı Java programını çalıştırmak için kullanılır.


    org.codehaus.mojo
    exec-maven-plugin
    3.1.1
    
        com.example.myapp.MyApplication
        
            arg1
            arg2
        
        
            
                my.property
                myValue
            
        
        runtime 
    

Yukarıdaki konfigürasyonda:

* : Çalıştırılacak Java sınıfının tam nitelikli adını (package dahil) belirtir. Bu zorunlu bir parametredir.
* : mainClass‘a geçirilecek komut satırı argümanlarını tanımlar. Her etiketi ayrı bir argümanı temsil eder.
* : Çalıştırılan JVM’e geçirilecek sistem özelliklerini tanımlar. Her etiketi bir anahtar-değer çifti içerir.
* : Çalıştırılan Java programı için classpath’a dahil edilecek bağımlılıkların kapsamını belirler. Olası değerler: compile, runtime, test. Varsayılan değer runtime‘dır, yani hem derleme hem de çalışma zamanı bağımlılıkları dahil edilir. test olarak ayarlanırsa, test bağımlılıkları da classpath’a eklenir.

Bu konfigürasyonla, uygulamanızı aşağıdaki komutla çalıştırabilirsiniz:

mvn exec:java

Eğer mainClass‘ı doğrudan komut satırından belirtmek isterseniz:

mvn exec:java -Dexec.mainClass="com.example.myapp.MyApplication" -Dexec.args="arg1 arg2" -Dexec.systemProperties="my.property=myValue"

Bu, pom.xml‘deki konfigürasyonu geçersiz kılar ve dinamik çalıştırmalar için kullanışlıdır.

Harici Komutları veya Scriptleri Çalıştırma (exec goal’ü)

exec goal’ü, Maven’ın dışında herhangi bir programı veya scripti çalıştırmak için kullanılır. Bu, bir shell scripti, bir Python programı, bir veritabanı istemcisi veya hatta başka bir Java uygulamasının kendi başlatıcısı olabilir.


    org.codehaus.mojo
    exec-maven-plugin
    3.1.1
    
        python 
        ${project.basedir}/scripts 
        
            myscript.py
            --param
            value
        
        
            someValue
        
        
            --long-param=longValue
        
    

Yukarıdaki konfigürasyonda:

* : Çalıştırılacak programın veya scriptin adını/yolunu belirtir. Eğer program PATH’te değilse, tam yolunu belirtmek gerekebilir (örn. /usr/local/bin/python).
* : Komutun çalıştırılacağı dizini belirtir. Varsayılan olarak proje kök dizinidir (${project.basedir}).
* : Çalıştırılan programa geçirilecek komut satırı argümanlarını tanımlar.
* : Çalıştırılan programa özel ortam değişkenlerini tanımlar.
* : Tek bir argüman olarak ayrıştırılacak uzun argümanları belirtir (örneğin, --param=value). Bu, ile aynı işlevi görür ancak bazı durumlarda daha okunaklı olabilir.

Bu konfigürasyonla, scriptinizi aşağıdaki komutla çalıştırabilirsiniz:

mvn exec:exec

Komut satırından executable ve arguments belirtmek için:

mvn exec:exec -Dexec.executable="ls" -Dexec.args="-l"

Bağımsız Bir JAR Dosyasını Çalıştırma

Bazen, Exec Maven Plugin kullanarak önceden paketlenmiş bir JAR dosyasını çalıştırmak isteyebilirsiniz. Bu, iki şekilde yapılabilir:

1. java goal’ü ile (eğer JAR’ın içinde Main-Class belirtilmişse):

Bu yöntem, JAR’ın kendi manifest dosyasında Main-Class özniteliği tanımlanmışsa çalışır. Exec Maven Plugin, bu durumda JAR’ı classpath’a ekler ve Main-Class‘ı otomatik olarak bulur.


        org.codehaus.mojo
        exec-maven-plugin
        3.1.1
        
            compile
            com.example.myjar.MainClass 
            
                ${project.build.directory}/my-app.jar
            
        
    

Ancak bu yöntem genellikle mainClass‘ı doğrudan sizin projenizin bir sınıfı olarak belirtmek için kullanılır. Eğer bir JAR’ı çalıştırmak istiyorsanız ve JAR’ın içindeki Main-Class‘ı kullanmak istiyorsanız, genellikle exec goal’ü ile java -jar komutunu taklit etmek daha yaygındır.

2. exec goal’ü ile (java -jar komutunu taklit ederek):

Bu, en esnek yoldur ve JAR’ın kendi Main-Class‘ını kullanmasını sağlar.


        org.codehaus.mojo
        exec-maven-plugin
        3.1.1
        
            java
            
                -jar
                ${project.build.directory}/${project.build.finalName}.jar
                arg1
                arg2
            
        
    

Burada, executable olarak java komutunu, arguments olarak da -jar ve çalıştırılacak JAR dosyasının yolunu belirtiyoruz. ${project.build.directory}/${project.build.finalName}.jar ifadesi, Maven’ın paketlediği JAR dosyasının yolunu dinamik olarak elde etmek için kullanılır.

Maven Yaşam Döngüsüne Bağlama

Exec Maven Plugin’i bir Maven yaşam döngüsü fazına bağlamak, belirli bir aşamada otomatik olarak çalışmasını sağlar. Bu, özellikle entegrasyon testleri, dağıtım öncesi adımlar veya özel doğrulama kontrolleri için kullanışlıdır. Bu bağlama işlemi etiketi altında yapılır.


    org.codehaus.mojo
    exec-maven-plugin
    3.1.1
    
        
            run-integration-tests-setup 
            pre-integration-test 
            
                java 
            
            
                com.example.test.TestSetup
                
                    setup
                
            
        
        
            run-post-build-script
            package
            
                exec
            
            
                sh
                
                    ./scripts/post-build.sh
                    ${project.version}
                
            
        
    

Yukarıdaki örnekte iki farklı execution tanımlanmıştır:

* Birincisi, pre-integration-test fazında com.example.test.TestSetup sınıfını çalıştırır. Bu, entegrasyon testleri başlamadan önce gerekli ortamı hazırlamak için kullanılabilir.
* İkincisi, package fazından sonra ./scripts/post-build.sh scriptini çalıştırır ve projenin versiyonunu argüman olarak geçirir. Bu, paketleme sonrası özel işlemler (örneğin, dağıtım için ek dosyalar hazırlama) için kullanılabilir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık