I just finished a Maven Tutorial to be used from my upcoming Spring Web Flow Tutorial and I thought it is good time to talk a little bit about Maven.
I have being involved in several building process for many different languages. Specifically for Java I have used shell scripts, Ant and Maven.
At the beginning when I learned about the existence of a better tool to do my builds I went to forums trying to get opinions about Ant versus Maven. By that time the community was really divided.
Nowadays we know about Ant limitations and while Maven is not the only tool that allows to circumvent them, it is for sure one of those that solve main issues:
1. No need to store jar files on version control systems like SVN. This allows for extremely fast checkouts of projects.
2. Transitive dependency. Projects depend on jars that at the same time depends on others. Once you declare a dependency on a given jar you need not to worry about those dependencies that result from the new inclusion.
3. Version headaches. It is common to include a jar file and then dependencies of that jar file. It is very easy to get wrong on the versions of the dependencies of the included jar. Maven will pick the right dependency versions for you.
4. Maven is actually a project management tool and not just a build tool. There are hundreds of plugins available going from compilation to deployment issues and bringing project reports. It covers pretty much all you need from SDLC perspective.
5. Maven has extensive support and is used nowadays in sample projects embedded in the well known frameworks like Spring. It is also the min building tool in use from Jakarta and other important Open Source Software projects. Pretty much there is no big project out there that is lacking support for Maven.
6. Maven is IDE agnostic. Thanks to the plugin architecture your projects can be run from Eclise, Netbeans or IDEA. How the project is debugged and run in your local IDE is a concern of plugins and that allows to get cleaner version system repositories as there is no need to store specific to IDE files.
Mavenizing an existing project is easy. Well done Maven!