Groovy ve Grape

İlk Groovy ile ilgili makaleler okumaya başladığımda en çok garipsediğim kısımlardan biri Grape bölümüydü. Grape kısmını garipsememin asıl nedeni tüm proje yapsını ve bağımlı olduğum kütüphaneleri maven ile yöneteceğimi düşünmemdi. Aslında Object Oriented proje olarak düşündüğümde bu tamamen yanlış sayılmazdı. Yalnız atladığım kısım Groovy’nin aslında bir Script dili olduğuydu.

Tabi sadece Script kısmını kullanacağım diye Java’nın gücünden vazgeçmenin gereği yok. Fakat bu durumda ClassPath gibi Java’ya özgü terimler işin içine girmeye başlıyor. Tam bu noktada hem Java kütüphanelerini kullanabileceğimiz hem de doğrudan sciprt olarak çalıştırabileceğimiz yapı yani Grape devreye giriyor.

Hazırlık

Grape maven sunucuları üzerinden çalışıyor. Bu sebepten kendi geliştirdiğiniz kütüphaneleride kullanmanız mümkün. Grape’i script içerisinde maven kullanmak olarak düşünebilirsiniz. Yine maven groupId, artifactId ve Version bilgisini kullanacağız. Daha fazla ilerlemeden önce groovy kurulumunu yapınız ve komut satırından groovy komutunu çalıştırıp sistem yoluna eklediğinize emin olunuz.

Maven ve Grape

Dediğimiz gibi maven ve grape benzer şekilde çalışıyor. Hatta Grape doğrudan maven sunucularını kullanıyor. Sadece kullandığı sözcükler biraz farklı.

  • Maven’daki GroupId, Grape’te group olarak geçiyor
  • Maven’daki ArtifactId, Grape’te module olarak geçiyor
  • Maven’daki Version, Grape’te version olarak geçiyor

Maven:

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency>

Grape

@Grab(group='org.apache.commons', module='commons-lang3', version='3.1')

Ayrıca Maven Depo‘sunda bulduğunuz bir kütüphaneyi doğrudan eklemek için Dependency Information kısmından Groovy Grape‘i seçebilirsiniz.

Script Uygulaması

Şimdi aynı şekilde bir script üzerinde bağımlılığı indirelim ve kütüphanede sağlanan bir sınıfı kullanalım.

GroovyExample.groovy


@Grab(group='org.apache.commons', module='commons-lang3', version='3.1')
import org.apache.commons.lang3.StringUtils

String str = "    "
println StringUtils.isBlank(str)

Burada basit olarak StringUtils sınıfını kullandık. Bunu istediğiniz isimde kayıt edip aşağıdaki komut ile çalıştabilirsiniz.

  • $ groovy GroovyExample.groovy

Burada eğer internet erişiminiz varsa ve genel maven deposuna erişebiliyorsanız kodunuz çalışacaktır. Çalımaya başladığı sırada ilgili kütüphaneleri indirecek ve sizin kullanmanıza izin verecektir.

Neler Yapılabilir

Basit bir String karşılaştırma örneği yapınca ne kadar kuvvetli bir şey ortaya çıkacağı belli olmadı. Ama isterseniz şöyle düşünün, yazdığınız bir script üzerinden veritabanı bağlantısı yapabilir (JDBC), gömülü bir sunucu(jetty) ayağa kaldırabilirsiniz. Hemde bunu bir script üzerinden bir kaç satır kod ile başarabilirsiniz.

JDBC


@GrabConfig(systemClassLoader=true)
@Grab(group='mysql', module='mysql-connector-java', version='5.1.6')

Burada dikkatinizi çekmek istediğim nokta SystemClassLoader kısmı. Bildiğiniz üzere JDBC kütüphanelerinin çalışma prensipleri gereği bu şekilde yüklenmesi gerekmektedir.

Jetty

Örnek olarak aşağıdaki kodu kullanarak bir Jetty server ayağa kaldırabilirsiniz. Sadece script’inizin bulunduğu dizine bir index.html atmanız yeterli. Sonrasında localhost:8080 adresinden erişebilirsiniz.


@Grab(group = "org.mortbay.jetty", module="jetty",  version="6.1.22")
import org.mortbay.jetty.*;
import org.mortbay.jetty.handler.*

def server = new Server(8080)
def resourceHandler = new ResourceHandler(welcomeFiles:["index.html"],
resourceBase:".")
server.handler = new HandlerList(handlers:[resourceHandler, new DefaultHandler()])

server.start()
server.join()

Birden Fazla

Yer yer birden fazla bağımlılığa da ihtiyacınız olabilir. Bunun için Grapes annotation’ınını kullanıyoruz.


@Grapes(
@Grab(group='org.apache.commons', module='commons-lang3', version='3.1')
)

Son

Groovy Grape ile birlikte Script yazımında inanılmaz kolaylıklar sağlıyor. Ayrıca Linux ortamlarda işimiz daha da güzelleşiyor. Eğer script dosyanızın başına “#!/usr/bin/env groovy” ifadesini eklerseniz ve dosyanızı Executable yaparsanız, kullanıcılarınız Groovy’nin varlığını farketmeden bile script’lerinizi çalıştırabilirler.

Kaynaklar

End Of Line