For a long time we’ve been using Ant to build our software and we’ve got ourselves a pretty decent multi-project build system, continuously integrating and all. There are automated server tests, a remote repositories and more. We started implementing all this way before Maven even hit their first beta and it all grew kind of organically. Lately I’m beginning to get kind of irritated when having to extend the build system for some stupid reason and started looking into different approaches. What bothers most is all the different hoops I have to jump through to get an build to do exactly what I want, without loosing flexibility. Since we have dozens of big projects running on the same build system it gets harder and harder to extend a piece of a specific project build without breaking some other parts (believe me, managing it all with one or more custom build files is simply not feasible anymore).
When thinking about it for a while, a complex yet extensible and still usable build system behaves in an object oriented way and needs the power of a full-fledged programming language. Martin Fowler already wrote about this once and Jon Tirsen seems to have implemented it on a big project and it sure sounds interesting: using Ruby to build your software.
It all seems pretty promising at first: use an OO language to implement your multi-project build system and you can extend a build to add behavior to it, use polymorphism to have it behave differently under different circumstances and all that. But then you start thinking about all those 100s of lines of Ant XML you have coded up some time in the past and all those tasks everybody has been creating and you realize it’s all going to be a major investment to replace all that! Jon has a quite interesting approach to tackle all this: use Ant from Ruby, and I quote: “We ended up creating a small “Ant-server”, a simple program that once started took Ant-snippets on it’s standard input and printed out the results on the standard output.”.
But after a while I realized that I’d probably loose my Ant-IDE(A) integration since it’d all not work with Ant anymore (yes, I’d be using Ant underneath, but that’d be it). Then I thought: isn’t this the same approach Maven took (by using a layer on top of Ant–the ugly as hell XML-based scripting language Jelly–sorry James). So now what, I’m going to do the same with Ruby (or maybe Groovy)? Ok, it’s no XML, but still…
I don’t know, I’ll probably have to think about this more. The idea of having a truely object-oriented build infrastructure sounds very nice, but I don’t know what kind of mess I’m getting myself into!
p.s. Aslak pointed me to this wonderful list of things a Java developer should know about Ruby.

[...] g run. The onyl reasonable thing I can think of is the idea I’ve been having about a Ruby-based build process reusing Ant to do the actual work. Probably it won’t be feasible to put thi [...]
We just switched back to Ant after using a Ruby based build process for 1.5 years. There are a number of reasons we did this, I will explain better on my blog when I find the time – I’ve saved a draft for it.
Wonderful site, where did you come up with the information in this piece of writing? I’m pleased I found it though, ill be checking back soon to see what other articles you have.