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
- Grape: http://groovy.codehaus.org/Grape
- Scripting Magic With Groovy, Grape and Jetty: http://www.joergm.com/2009/12/scripting-magic-with-groovy-grape-and-jetty/
End Of Line