AspectJ 8 hakkında detaylı bilgileri bir önceki bölümde verdiğimizden dolayı direkt Gradle aracını ve onunla mevcut AspectJ projemizi bağlayıp çalışan bir gaspectj sistemi oluşturacağız.
Öncelikle mevcut projemizi birleştirmeden, Gradle dünyası hakkında bazı bilgiler vermek istiyorum. Bilindiği gibi Ant ve Maven Java projelerini hizaya sokmak için biçilmiş kaftanlardır. Bu 2 önemli mekanizmayı bünyesinde kullanan bir otomasyon aracı daha düşünün ve onların üzerine kendi yaklaşımlarını ve farklı fonsiyonellikleri geliştirsin: Gradle mekanizması tam olarak bunu sağlamaktadır. Gradle, gelişen ve evrimleşen derleme otomasyonu olarak adından söz ettirmektedir. JVM tabanlı derleme araçları arasında evrim niteliğinde olduğu da söylenmektedir. Ayrıca, Gradle topluluğu, getirdiği yenilikler ile şuan için en iyi derleme sistemi olarak bu aracı gösteriyorlar. Gradle ile temel olarak derleme, test yapma ve yayınlama gibi başlıca geleneksel ama bir o kadar önemli işlemleri otomatikleştirebiliyoruz. Gradle, Groovy (Java baz alınarak yazılmıştır) temel alınıp alana özgü dil (domain-specific language) olarak tasarlanmıştır. Bünyesinde Apache Ant, Maven ve Ivy mekanizmalarını kullanmaktadır.
Şekil 8.2, örnek bir Maven projesine ait pom.xml
dosyasını ve ona karşılık gelen Gradle projesinde kullanılan build.gradle
dosyasını bizlere göstermektedir. XML okunması ve yazılması en kolay olarak bilinmekte ama projenin karmaşıklığı (ör: bağımlılıklar) arttığında pom
dosyasının okunabilirliği bir o kadar zor olacaktır. Gradle, Groovy DSL olduğu için siz aslında ister istemez Groovy yazmaya az da olsa itilmektesiniz. Bu özellik sayesinde 30 satırlık pom
dosyası daha anlaşılır ve okunabilir halde toplam 10 satıra kadar inmektedir.
Gradle aracını kolaylıkla kullanabilmek için oluşturulmuş bir yöntemdir. Gradle Wrapper için gereken dosyalar projenin dizinine oluştuğunda windows sistemleri için .bash
uzantılı ve OS X sistemleri için de .sh
uzantılı dosyalar da yaratılmaktadır. Bu dosyalar, kendi sisteminize Gradle aracını yüklemeden mevcut build.gradle
dosyalarına sahip projeleri derleme imkanı tanımaktadır. Bunu gerçekleştirmek için build.gradle
dosyasının içine yeni bir wrapper
görevi (task) koyulmalıdır:
task wrapper(type: Wrapper) {
gradleVersion = '1.11'
}
Daha sonra terminalden bu görevi çalıştırarak wrapper için gerekli dosyaları projenin dizinine oluşturulmasını sağlamalıyız:
$ gradle wrapper
Şekil 8.1 çalıştırılan görevden sonra kendi projemizde oluşan yeni dosyaları göstermektedir. Bu işlemi tamamladıktan sonra projeyi indiren geliştiricilerin sadece aşağıdaki komutu aynı gradle
komutu ile yapıldığı gibi çalıştırarak projeyi derleyebilir:
$ ./gradlew build
GaspectJ gradle #wrapper #gradle-wrapper.jar gradle-wrapper.properties gradlew ##gradlew.bat
Projeyi derleyip gereken .jar
dosyası yaratıldığında sistemde mevcut bir başlangıç sınıfının çalışması için aynı şekilde build.gradle
dosyasına gereken bilgiler girilmelidir:
apply plugin: 'application' (1)
mainClassName = 'com.kodcu.app.main.Startup'
-
Derleme işlemi bittikten sonra uygulamayı çalıştır (
./gredlew run
ya dagradle run
) komutuyla başlatmak için uygulama işlemine başvurulmalı ve gerekli başlangıç sınıfı dosyanın içinde ayarlanmalıdır. Gradle hakkında daha fazla bilgiyi dokümantasyon sayfasından ulaşabilirsiniz.
Eveoh tarafından kendi projelerinde kullanmak adına geliştirilen Gradle AspectJ plug-in’ini biz de kendi projemizde kullanmış olduk. Bu plug-in ile birlikte gradle.build
dosyasının içeriği konfigüre edilerek bazı [1] projelerde AspectJ compiler/weaver tetiklenmekte ve projedeki ilgi yönelimli alanlar çalışır hale gelmektedir.
AspectJ projemizin build.gradle
dosyasının tam halini gerekli açıklamalarıyla görmekteyiz:
buildscript {
repositories {
maven {
url "https://maven.eveoh.nl/content/repositories/releases" (1)
}
}
dependencies {
classpath "nl.eveoh:gradle-aspectj:1.5" (2)
}
}
repositories {
mavenCentral() (3)
}
project.ext {
aspectjVersion = '1.8.4' (4)
}
apply plugin: 'aspectj' (5)
apply plugin: 'eclipse' (6)
apply plugin: 'idea' (7)
apply plugin: 'application'
mainClassName = 'com.kodcu.app.main.Startup'
compileAspect {
additionalAjcArgs = ['sourceRoots': 'src/main/aspect'] (8)
}
jar { (9)
baseName = 'GASPECTJ'
version = '1.0'
}
task wrapper(type: Wrapper) {
gradleVersion = '1.11'
}
-
eveoh şirketine ait özel Maven repo bağlantısını derleme içeriğine ait olan bölüme giriyoruz.
-
classPath
bağlılığı olarak yani çalıştırılması gereken komut zincirinde olması gereken aspectjtools 1.8.4 ve aspectjrt 1.8.4 dosyaları organizasyon adınl.eveoh
, kütüphane ismigradle-aspectj
ve versiyonu1.5
olan bağlılık konuşlandırılmaktadır. -
Merkez Maven (http://repo1.maven.org/maven2) deposuna bağlanarak Gradle buradan gerekli bağlılıkları temin edecek. Bu bağlantıya HTTP üzerinden ulaşılır. HTTPS bağlantısı desteklememektedir.
-
AspectJ’nin son sürümü 1.8.4 ile AJ sistemi derlenecek.
-
Hem
.java
hem de.aj
dosyalarının derlenmesi için son olarakaspectj
komutuna başvurulmaktadır.$ gradle build
veya$ gradlew build
otomatik olarak bu komutu çalıştıracaktır. -
Mevcut Gradle ile çalışan AJ sistemini Eclipse IDE ortamına entegre etmek için gereken metadata dosyalarını oluşturmak için koyulmuştur. Terminalde
$ (gradlew | gradle) eclipse
çalıştırılarak bu işlem gerçekleşir. -
Mevcut Gradle ile çalışan AJ sistemini Intellij IDEA ortamına entegre etmek için gereken metadata dosyalarını oluşturmak için koyulmuştur. Terminalde
$ (gradlew | gradle) idea
çalıştırılarak bu işlem gerçekleşir. -
Gradle, sistemde mevcut olan tüm kaynak kodların
src/main/java
dizininde aramaya çalışmaktadır. Buna ek, AspectJ Ant Task (iajc) yapısındakisourceRoots
komutunu kullanarak sistemdeki mevcut.aj
dosyalarınınsrc/main/aspectj
dizininde olduğunu ve oraya da bakmasını istiyoruz. Mevcut ajc komutlarını (sourceRoots
gibi)additionalAjcArgs
kısmınında belirterek bu işlemler yapılmaktadır. -
Derleme sonucu oluşan
.rar
dosyasına ait bilgiler (isim ve versiyon numarası gibi) burada belirtilir.
Sistemin derlenmesinde rol oynayan komut zinciri şu şekildedir:
ant:iajc: **\javaw.exe -classpath **\aspectjtools-1.8.4.jar org.aspectj.tools.ajc.Main -d, **\GaspectJ\build\classes\main -source 1.8 -target 1.8 -Xlint:ignore -showWeaveInfo -classpath, **\aspectjrt-1.8.4.jar -sourceroots **\GaspectJ\src\main\aspect; **\GaspectJ\src\main\java
**
, dosya yolunda gösterilmeyen ön kısma işaret etmektedir.
Bu Gradle projesine github.com/kodcu/ üzerinden erişebilirsiniz.