- What is Maven?
- Why not Ant and Ivy?
- But It Downloads the Internet
- Getting Started
- What is a POM?
- Convention over Configuration
- New Project
- Project Management
- Parent POM
- Local Maven Repository
- Multiple Artifacts from a Single Source
- Release Plugin
- Aggregate POM
- Dependency Management
- Distribution Zip
What is Maven?
Maven is a software project management and comprehension tool that includes: build tools, dependency management, project reporting and much more. I say “much more” because at the core Maven is a plugin execution framework. There are plugins supported by the Maven project (http://maven.apache.org/plugins/index.html), plugins supported by Mojo Project (http://mojo.codehaus.org/plugins.html), and third party plugins. If you can find or write a plugin, Maven can run it.
Plugins are configured to run during specific phases in the Maven lifecycle. The high-level phases that make up the build lifecycle include: validation, compile, test, package, integration-test, verify, install, and deploy. An exhaustive list of build phases can be found at http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference.
Why not Ant and Ivy?
People always gravitate to this question of whether Maven is better than Ant and Ivy. Unfortunately this is not a fare comparison. Ant is a build tool and Ivy is a dependency management tool. Maven is not just a build tool or just a dependency management tool. On the contrary, Maven is a project management tool that embodies software development best practices.
To illustrate this point I will share a story from my early years in software development. Our shop used Ant without Ivy. Ivy didn’t become a full fledged Apache project until October, 2007. Each team had their own Ant build. As we began to move from team to team we had to find out which targets needed to be run. Over time we decided on a set of names that every team needed to implement. This helped but just because the target was named the same thing it did not mean they worked the same way.
Long story short, we began to meet to create a shared standard. During this long process we were introduced to Maven. Ironically, Maven had accepted standards for many of the issues that we were trying address. Maven was not just a standard for our company it was a standard for all Maven users. New employees that were familiar with Maven had a good grasp of how we managed our projects.
Maven provided a standard that not only addressed our concerns as software developers. It provided a standard solution that supported our corporate: audits, disaster recovery, tracability, and the list goes on. We were trying to reinvent the wheel with Ant when the Maven community had already solved these problems.
Ant and Ivy are powerful ingredients for designing a custom build process. Maven however is a powerful solution for building and managing software. In our case we wanted a solution instead of the ingredients and tools to create our own solution. Maven satisfied our needs and saved us significant time and money.
But It Downloads the Internet
I can’t tell you how many people have told me that they don’t like Maven because it “downloads the internet”. I find it ironic that many of them like Ivy. I hate to break the news, but Ivy downloads the internet too. I’m not sure why this is a concern. Is there a fear that Maven will fill up their hard drive? Disk space is cheap. The computer I am working on right now has 150GB of hard disk space and my Maven local repository is eating up 300MB of it. This computer has pleanty of room for more of the internet.
I recall the first time that I tried to setup a new project without a dependency management tool. I spent over a week trying to download the correct version of each JAR. I was ready to take a vacation by the time I finished this ugly puzzle. After using Maven and Ivy for managing my dependencies I will never go back. By the time I downloaded all the JARs that we needed, I felt like I had in fact downloaded the entire internet.
I love dependency management tools and they can have as much of my hard drive as they need.