Wednesday, July 18, 2007

Gant (Groovy Ant)

Çoğu sürüm sisteminin temelini Ant scriptleri oluşturur. Ant scriptlerinin üzerine CI (Continuous Integration) Server'lar yerleştirilir. Otomatik ve manuel çalıştırılan scriptler ile hayat daha da güzelleştirilir. Ama benim gibi programcılık kökenli iseniz, Sürüm Sistemi'nin her katmanını sorgulayıp, "daha programlanabilir veya daha esnek olamaz mıydı?" diye sorabilirsiniz.

Gant ise bu noktada kısmen düşüncelerimize yanıt verecek bir yapı sağlıyor. Kısmen dememin sebebi ise Gant'ın Ant'a değil, Ant scriptlerini yazma şekline bir alternatif olması. Gant, Groovy script'den başka birşey değil. Ama Ant gibi XML'in kısıtlamaları ile çevrili değil. Yazdığınız bir target içerisinde diğer target'ları aynı kodlama yapıyormuş gibi birer altmetod olarak çalıştırabiliyorsunuz.

target ( altmetod : 'Aciklama alani' ) {
Ant.echo ( message : 'altmetod calisti' )
}

target ( metod : 'Aciklama alani' ) {
altmetod ( )
Ant.echo ( message : 'metod calisti' )
}



Uzun süredir, ant scriptleri ile çalışıyorsanız, yukarıdaki gibi ant scriptleri yazabilmenin yanında neleri yapabilmeyi getirebileceğini hayal edebilirsiniz. Bu arada Gant'ın tüm Ant Core Task'larını desteklediğini söylemekte fayda var. Kullanması çok basit, "Ant." deyip, ardından task'ın adını yazıyorsunuz, attribute'ları da yukarıdaki formatta "attr_name : value" şeklinde verebiliyorsunuz.

Gant'ın dezavantajlarından birisi Groovy öğrenmenizin gerekmesi, bir diğeri henüz yeni olduğu için tüm CI Server'lar ile çalışamıyor olması (mesela Hudson, ama CruiseControl'a bakmadım).

Ama Gant ile birlikte kimbilir belki birgün Java'da bir scripting dili ile Ant'a yardımcı-rakip olmaya çalışır.

2 comments:

Mustafa Tan said...

Selam Oğuz,

Klasik Ant'ın antcall taskı ile zaten ant içinden başka bir task'ı çağırabiliyorsun.

Bakınız: http://ant.apache.org/manual/CoreTasks/antcall.html

Groovy Ant'ın en önemli yararı for-each, if, variable assignment, vs. gibi daha programatik işlerde ortaya çıkıyor.

Gerçi bu işler için de Ant Contrib diye bir kütüphane mevcut:

http://ant-contrib.sourceforge.net/tasks/tasks/index.html

oguzdag said...

Mustafa,

Ant tabi ki birçok şeyi yapıyor, yapmak da zorunda, çünkü beslemesi gereken kocaman bir community var. Ama herşeyi desteklemeye çalışırken artık içinden çıkılmaz ve anlaması inanılmaz güç XML, eklenti ve classpath'ler ile uğraşmaya başlıyorsun. Yazı belki de anlatmak istediğimi tam anlatmadı ama Gant aslında belki de Jant'a giden yolu açan bir küçük ışık.