So, one of the things I've been playing around with in my oh-so-copious spare time is making the Abdera build use Ivy to download its dependencies instead of the current hardcoded system we've currently got in the ant build. I've sort of been feeling my way around, as I haven't been able to find very many good examples of how to set up multiple module builds in a single source tree with Ivy, but yesterday I came up with something pretty nice, so I figured I'd post a patch to see what people think.
Note that this isn't done. It only builds the core, parser, protocol, client, and extensions modules, and it doesn't have anything set up for publishing releases, doing retroweaver junk, etc. It's also not taking full advantage of Ivy's abilities, we should be using different configurations for things like saying that the junit stuff is only needed for tests, and splitting out big dependencies like jaxen (which appears to pull in the whole bloody world) so that you only get that if you're actually using it. Finally, there's too much duplication of code in the module's build.xml files, I'd like a solution to that that either generates them from a common template or has them pull in the code they need from an external source, but I haven't gotten around to thinking about the best way to do that (it's just screaming for the import ant task, but that has "Beta Code, Stay Away" written all over it). A bit about how the build is structured. There's a top level build.xml file that just handles bootstrapping ivy and then calls each module's build.xml. In each module there's the actual logic for doing the builds and for handling dependency resolution. When each module's build is complete it is published into a local ivy repository so that modules that depend on it can access it. Assuming that you've bootstrapped ivy once it's possible to build modules independently of each other (just cd into core and type 'ant', for example), although you need to make sure its dependencies have already been built. The only things that actually vary for each module is the name of the project in the build.xml file and it's ivy.xml file, which is where you actually specify dependencies and things like that. The top level ivyconf.xml configures Ivy to use the maven2 repos at repo1.maven.org and the incubator maven2 repository on people.apache.org, although at this point that isn't used for anything, it's just a hold over because the project I copied this logic from (the speedyfeed lab) used that to depend on Abdera itself Anyway, here's the current work in progress patch, in case anyone else is curious. I'm not sure when I'm going to find some free time to continue this work, but hopefully it'll happen eventually. Let me know what you think. -garrett
