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

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