• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEduKodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

Maven Plugin Nasıl Geliştirilir?

  • Posted by Rahman Usta
  • Categories backend, Genel, Uncategorized, Yazılar, Yazılım
  • Date 18 Temmuz 2014

Merhaba arkadaşlar, bu yazımızda sizlere bir Maven plugin'in nasıl geliştirileceğinden bahsetmek istiyorum.

Apache Maven, Java teknolojileriyle uğraşanların ağırlıklı olarak kullandığı bir ürün. Maven ile projelerinizin bağımlı olduğu JAR paketlerini kolaylıkla yönetebildiğiniz gibi, Plugin desteği sayesinde, çeşitli yaşam döngüsü anlarında istediğiniz aksiyonların koşturulmasını sağlayabiliyorsunuz.

Maven sunucularında halihazırda yazılmış tonlarca eklenti bulunsa da, biz bugün öğretim amacıyla basit bir plugin geliştirmiş olacağız.

Not: Eğer henüz Maven aracının ne olduğuna dair fikriniz yok ise, Apache Maven Teknolojisine Giriş adresindeki başlangıç vidyosunu izlemenizi öneririz.

 

Şimdi herhangi bir Maven çalışma evresinde üretilen bir dosyanın, istenilen bir dizine, istenilen bir evrede, otomatik olarak kopyalanması görevini yürüten bir Maven Plugin projesini beraber geliştirelim.

Gereksinimler

1) pom.xml içerisindeki paketleme biçimi maven-plugin olarak düzenlenir.

<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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.kodcu</groupId>
    <artifactId>copy-maven-plugin</artifactId> <!-- Eklenti adı -->
    <version>1.0.0</version>


    <packaging>maven-plugin</packaging> <!-- Dikkat!! -->

</project>

2) maven-plugin-api ve maven-plugin-annotations bağımlılıkları, pom.xml içerisine eklenir.

<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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.kodcu</groupId>
    <artifactId>copy-maven-plugin</artifactId>

    <version>1.0.0</version>
    <packaging>maven-plugin</packaging>

    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>3.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>3.3</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

Bir Maven Plugin geliştirebilmek için, pom.xml üzerinde asgari ölçekte 1. ve 2. numaralı düzenleme yeterli olmaktadır.

Mojo Tanımlayın

Mojo, "Maven Old Java Object" ifadesinin kısaltılmış halidir. Maven ekosisteminde bir nesnenin Mojo kabül edilebilmesi için Mojo arayüzüne erişmesi gerekmektedir. Mojo sınıfların konfigürasyonu için ise @Mojo isimli notasyon kullanılmaktadır.

public interface Mojo {

    String ROLE = Mojo.class.getName();

    void execute() throws ...;

    void setLog( Log log );

    Log getLog();
}

Mojo arayüzü oldukça basittir. Maven ortamında tanımlanan bir Mojo sınıfı, bir Maven golüne denk gelmektedir. "goal" ise Maven ortamında koşturulacak bir görevin isim olarak temsili halidir. Koşturulması istenen görev veya görevler ise, mevcut Mojo nesnesinin execute() metodunda koşturulmaktadır.

Şimdi kopyalama golünü yürütecek bir Mojo sınıfını tanımlayalım.

@Mojo(name = "copy")
public class Copier extends AbstractMojo {

@Parameter
private String sourcePath;

@Parameter
private String targetPath;

@Override
public void execute() throws ... {

 Path source = Paths.get(sourcePath);
 Path target = Paths.get(targetPath).resolve(source.getFileName());

 getLog().info("*** Copying Started ***");
	
 Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
	
 getLog().info("*** Copying Completed ***");

 }
}

Copier sınıfı, sourcePath ve targetPath isimli iki parametreye ihtiyaç duymaktadır. Bu parametreler copy-maven-plugin eklentisini kullanan projelerin pom.xml dosyalarında bir XML elemanı olarak deklare edilmesi gerekmektedir.

Maven eklenti geliştirirken, bir parametre tanımlamak için, Mojo sınıfı içerisindeki global alanın başına @Parameter notasyonu getirilmelidir.

@Mojo notasyonunun "name" alanı ise, Mojo sınıfına karşılık gelen golün ismini belirtmektedir. "copy" golünün hedefi ise, execute() metodu içerisindeki kopyalama işleminin koşturulmasıdır.

Maven Plugin Hazır

Bu adımlar sonunda basit bir Maven Plugin'i oluşturulmuş oldu. Daha detaylı bilgiler için Guide to Development Maven Plugin başlıklı dökümanı okumanızı önermekteyim.

copy-maven-plugin 'in İnşa Edilmesi

$ mvn clean install

"mvn clean install" komut girdisi, pom.xml'in bulunduğu dizinde koşturulduğunda, lokal maven deponuzda plugin'in paketlenmiş halini görebilirsiniz.

Lokal maven deposu <UserHome>/.m2/repository dizininde yer almaktadır. Örneğin şuanki çalışma ortamımda copy-maven-plugin aşağıdaki dizinde yer almaktadır.

C:Usersusta.m2repositorycomkodcucopy-maven-plugin1.0.0

Dizin içerisinde ise eklentinin çıktılarını görebiliriz.

copy-maven-plugin 'in Kullanılması

Eklenti lokal depoya yansıtıldığına göre artık kendi projelerimizde copy-maven-plugin' i kullanabiliriz. Kullanım için, eklenti projenizin pom.xml dosyasına tanımlanmalıdır.

<plugin>
<groupId>com.kodcu</groupId>
<artifactId>copy-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
  <sourcePath>${project.build.directory}/${project.name}-${project.version}.war</sourcePath>
  <targetPath>E:apache-tomcat-8.0.8webapps</targetPath>
</configuration>
<executions>
 <execution>
   <phase>package</phase> <!-- war sonrasında -->
   <goals>
	 <goal>copy</goal> <!-- kopyala -->
   </goals>	
 </execution>
</executions>
</plugin>

copy-maven-plugin'in kullanım örneğini yukarıdaki kod parçasında görebilmekteyiz. sourcePath ve targetPath parametreleri Mojo içerisinde tanımlandığı üzere, burada da konfigüre edilmiştir. sourcePath projenin target dizinindeki war çıktısının adresini gösterirken, targetPath ise, sistem üzerinde yer alan Tomcat sunucusunun webapps isimli dizinini referans almaktadır.

Copier mojosunun golü "copy" dir, ve kopyalama işleminin ne zaman yapılacağı ise, "phase" elemanı içerisinde tanımlanmıştır. Kısacası, war paketlemesi yapıldığında, "copy" golü koşturulmaktadır. "copy" golü burada "package" evresinde koşturulmaktadır fakat, Maven ortamında tanımlı herhangi bir evre de, ihtiyacınıza binaen kullanılabilecektir. Diğer evreler için http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html adresini takip edebilirsiniz.

Kaynak kod

Kaynak kod ve uygulama örneğine aşağıdaki bağlantıdan erişebilirsiniz.

Copy Maven Plugin

Tekrar görüşmek dileğiyle.

Tag:apache maven, backend, maven

  • Share:
author avatar
Rahman Usta
Kodedu.com bünyesinde eğitim ve danışmanlık faaliyetleri sürdüren Rahman Usta, 2012 yılında yayına çıkan popülerJava Mimarisiyle Kurumsal Çözümler ve 2014 yılında yayınlanan Java 8 Ebook kitaplarının yazarıdır. Açık kaynak dünyasına katkı veren yazar, geliştirdiği AsciidocFX projesiyle Duke's Choice Award 2015 ödülünü kazanmıştır. Rahman ayrıca, Istanbul JUG'un ve Java standartlarını geliştiren JCP (Java Community Process)'in bir üyesidir. 2018 yılında Java Şampiyonu olarak seçilmiştir.

Previous post

Kritik Dosyalarınızı Git Reponuzdan Temizleyin
18 Temmuz 2014

Next post

XSS açıklarına karşı Sanitize işlemi
20 Temmuz 2014

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
spring-cli-logo
Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos, 2017
eureka_architecture
Spring Cloud Netflix ve Eureka Service Discovery
3 Temmuz, 2017

Leave A Reply Cevabı iptal et

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

E-posta listesine kayıt olun!






Gözde yazılar

Performans, Yük ve Stres Testleri
26Ağu2012
CDI – @Produces, @New ve @PostConstruct Notasyonları
22Tem2013
Java EE 8 ile yeni MVC Framework geliyor
03Eyl2014
Webiner : Java 8 | Project Lambda
07Ara2012

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • YAML Nedir? Neden YAML Kullanmalıyız? için shahriyar
  • Java Persistence API Nedir? (Giriş) için Utku
  • Java 8 – CompletableFuture ile Asenkron Programlama için Rahman Usta
  • Java 8 – CompletableFuture ile Asenkron Programlama için burak
  • Arm7 Nxp 2104 işlemci ile basit bir Uygulama için Mustafa Dinc

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.