Skip to content

Latest commit

 

History

History
135 lines (96 loc) · 7.8 KB

chapter-10.asc

File metadata and controls

135 lines (96 loc) · 7.8 KB

Gradle Projelerinde AspectJ8 Desteği

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 Wrapper Kullanarak Projeleri Derleme

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
Gradle Wrapper Dosyaları

GaspectJ gradle #wrapper #gradle-wrapper.jar gradle-wrapper.properties gradlew ##gradlew.bat

mvngradle
Figure 1. Maven vs Gradle Proje Derleme Dosyaları

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'
  1. Derleme işlemi bittikten sonra uygulamayı çalıştır (./gredlew run ya da gradle 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.

Örnek Gradle Projesi

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:

AspectJ Projemizin Gradle Dosyası
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'
}
  1. eveoh şirketine ait özel Maven repo bağlantısını derleme içeriğine ait olan bölüme giriyoruz.

  2. 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 ismi gradle-aspectj ve versiyonu 1.5 olan bağlılık konuşlandırılmaktadır.

  3. 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.

  4. AspectJ’nin son sürümü 1.8.4 ile AJ sistemi derlenecek.

  5. Hem .java hem de .aj dosyalarının derlenmesi için son olarak aspectj komutuna başvurulmaktadır. $ gradle build veya $ gradlew build otomatik olarak bu komutu çalıştıracaktır.

  6. 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.

  7. 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.

  8. 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ındaki sourceRoots komutunu kullanarak sistemdeki mevcut .aj dosyalarının src/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.

  9. 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.


1. Sistem gereksinimleri açısından her AspectJ projesine uyumlu olmayabilir. Bizzat kendileri tarafından söylenmektedir.