Maven

Some people love it. Some people hate it.

I think the defining characteristic of Maven is that it separates operations on a project from a project itself. There are certain "tasks" you do on many of your projects, like creating a distribution package, or running unit tests, or building the javadoc.

With Ant, every target you define is specific to your project. Therefore you need to re-write a similiar build script again and again, each time you start a new project. That's fine when you have 5 projects or so, but it gets tedious as the number goes up. Thus Maven saves you a lot when you work with numerous projects.

To separate projects from operations, your project needs to fit in a certain model. This can be a good thing and a bad thing.

It is good, because now you can treat your projects uniformly. For example, in Sun, it's a lot of effort to integrate projects into JWSDP. All those efforts are necessary because each project is keeping dependency jars in different places, they use different build targets, they need different properties to be set, and they produce builds into different places. None of them will be an issue if you use Maven.

But it can be bad as well, because a large project doesn't easily fit into a model. In my experience, almost any deviation from the "typical" Maven project requires serious Maven hacking. This includes things like code-generation before javac or building two sets of jar files.