10 Temmuz 2015 Cuma

Java Kütüphanesini Maven Reposunda Gönderme



Merhaba Arkadaşlar,

Android Studio ile geliştirme yaparken ister istemez, kendimce gradle ile epey haşır neşir oldum. Bu süreç içerisinde bir çok farklı plugin ile çalıştım. Bu yazıda sizlere çok faydalı bulduğum ve kullanmaktan keyif aldığım bir gradle plugin'inden bahsedeceğim: The Maven Plugin.

Jvm tarafında son zamanların flash build sistemi olan Gradle dependency management noktasında tekerleği yeniden keşfetmiyor; yerine zaten işini iyi yapan, olgun bir sistem olan maven'ın repository yapısını kullanıyor. Bu plugin'de özünde geliştirdiğiniz projenizin çıktılarını(jar, aar vs) maven reposuna deploy etmenizi sağlıyor. Bu sayede küçük de olsa kendi geliştirdiğiniz ortak kod yapılarını farklı projelere versiyonlayıp dağıtmanız kolay ve otomatize bir hal alıyor.

Maven plugin'ini bilmediğim/kullanmadığım zamanlar yazdığım genel geçer, ortak sınıfları(FileUtil.java, StringUtil.java vs.) el yordamıyla(copy-paste) yeni başladığım projelere aktarırdım. Bu işleyiş tabitayıla görülen ilk olumsuzluk; taşıma için gereken manuel efordu. Daha zor kısmı ise bu kütüphanelerde haliyle, aklınıza geldikçe geliştirme yapıyorsunuz fakat bunu ilgili projelere yansıtmak ve senkronizasyonu sağlamak başlı başına bir problem olmaya başlıyor. Sonuçta küçük de olsa yazdığınız, ortak kulanıllabilir yapıları barındıran bu kütüphaneleri usulüne uygun olarak dağıtmak bir gereklilik, tıpkı remote repolardan çektiğimiz third party library'ler gibi.

Maven plugin'ini kullanarak gradle/maven tabanlı projelerinizde kendi yazdığınız kütüphaneleri versiyonlama yaparak, çok pratik bir şekilde kullanmak mümkün. Gradle dependency managment noktasında zaten olgunlaşmış bir çözüm olan maven'ın artifact repo yapısını kullanıyor. Neyse lafı fazla uzatmadan implementasyona geçelim:

Öncelikle kütüphane projenizin gradle scriptine(build.gradle) maven plugin'ini ekliyoruz, built-in bir paket olduğu için ayrıca classpath deklare etmemiz gerekmiyor:
apply plugin: 'maven'

Evet bu tanımlama ile artık gradle scriptimize uploadArchives node tanımı yapabilir hale geliyoruz, lokal maven reposuna deploy yapmak için gerekli groupId, artifactId ve versiyon bilgilerini aşağıdaki gibi geçiyoruz:
uploadArchives {
    repositories {
        mavenDeployer {
            pom.groupId = 'com.gturedi.utils'
            pom.artifactId = 'common-utils'
            pom.version = '1.0.0'
            repository url: 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
        }
    }
}

Sıra geldi java kütüphane projemizin çıktısını(jar) repoya atmaya, bunun için maven plugin'i ile gelen uploadArchives task'ını projenin bulunduğu dizinde etkin olan terminal'den excute etmemiz yeterli:
gradle :common-library:uploadArchives

Artifact bilgilerine göre lokal maven reposunu kontrol ederseniz ilgili jar, pom ve xml dosyalarını barındıran paketi görmeniz mümkün:
gturedi@gturedi-pc ~/.m2/repository/com/gturedi/utils/common-utils/1.0.0 $ ls -l
-rw-r--r-- 1 gturedi gturedi 1087 Tem 10 00:33 common-utils-1.0.0.jar
-rw-r--r-- 1 gturedi gturedi   32 Tem 10 00:33 common-utils-1.0.0.jar.md5
-rw-r--r-- 1 gturedi gturedi   40 Tem 10 00:33 common-utils-1.0.0.jar.sha1
-rw-r--r-- 1 gturedi gturedi  402 Tem 10 00:33 common-utils-1.0.0.pom
-rw-r--r-- 1 gturedi gturedi   32 Tem 10 00:33 common-utils-1.0.0.pom.md5
-rw-r--r-- 1 gturedi gturedi   40 Tem 10 00:33 common-utils-1.0.0.pom.sha1

Herşey tamamsa yeni projelerinizde aşağıdaki gibi tek satır dependency tanımlamasıyla kütüphanenizi kullanmanız mümkün:
compile 'com.gturedi.utils:common-utils:1.0.0'

Girdide bahsi geçen gradle yapılandırmalı java projesine burdan ulaşabilirsiniz.

İlerleyen zamanda kütüphanenizde yapacağınız geliştirmeleri versiyonlamak, bağımlı projelerde kırılmalara engel olup, senkronizasyonu yönetmek size kalmış :]

Gradle ile build'leriniz esen kalması dileğiyle!

Hiç yorum yok:

Yorum Gönder