Coming Next in Raven

We’ve started working on several improvements and new features to improve your Java builds with Matthew. All of which should come when we’re ready for a 2.0 release of Raven. I’m going to give you a quick overview here and I’ll probably go into some more details and rants in later writeups.

So I haven’t been writing for a while and the main reason is that I’ve been pretty busy. There’s been some book writing (getting closer to being published, I’ve finished most of the content), a lot of Apache ODE development for Intalio and of course Raven. Plus the winter in San Francisco is pretty nice so far, so surfing and swimming is tempting.Skunk Works › Edit — WordPress

Anyway I’m not here to wine about time scarcity, life is too short and all that. This is wasting,

The first big change you will see it that we’re now tied to JRuby. Honestly I would have liked to keep CRuby but there’s no real point when the goal is building Java and this gives space for several optimizations and nice features.

The main optimization is Matthew’s build server that he integrated from JRake. The idea is that you start a VM only once on your machine and then the build is always executd in it. The client just tells the server which task to execute and where and voila! The downside is that you have to keep the server running but it’s fairly small, the upside is that you have absolutely no startup cost when building. And as most tasks directly use Java classes (javac, javadoc, jar, junit and all the jays), the execution is also much faster than if you shell out like Raven used to do.

Another big modification is the use of “channels”. I think that one will deserve its own blog post, I don’t want to summarize too much and confuse you. But in short this simplifies the interactions between your tasks, they will be able to reuse easily the result produced by other tasks (code generation, jar production and all the usual suspects) without you needing to care about it. And making it easy when you really need to care about it.

Yet another goodie brought from JRake by Matthew is multithreaded builds. Your tasks run in parrallel whenever possible. And that saves you time too, especially in this new multicore era with your processors multiplying quicker than a spermatozoid meeting an ovule.

There will also be Ant integration just because rebuilding all the nice tasks that have been built for Ant would take us too much time. I’m not talking about mkdir or ssh here, Ruby offers better alternatives. But for XDoclet, XMLBeans or some VCSs support, it’s a must have. We’ve started with AntBuilder but we may very well end up with Antwrap as its maintainer, Caleb Powell, is a pretty active guy and AntBuilder is dormant.

And that’s not all. Better logging. Much, much better logging. Better JUnit support. Maybe some Continuous Integration integration. And maybe more.

Stay tuned…

Pic from Deborah Lattimore.


4 comments so far

  1. kofno on

    Sounds like you guys are working on some great stuff. I’m looking forward to trying it out.

  2. Adam Bouhenguel on

    I believe I’ve built something similar to what you’re describing. My ‘channels’ are called ‘outputs’. Each target/artifact can emit any number of them (each is labeled by a tag). These outputs also have Rake tasks associated with them, which are run (lazily, of course) if the output is ever retrieved. Perhaps we should talk more, as some of my experiences (and code) may be useful.

  3. mriou on

    Sure, that would be great! We have a development mailing list, could you subscribe to it and send a mail to describe what you came up with? Here is the URL:


  4. mriou on

    Kofno: thanks for the nice words 🙂

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: