This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
* Enforces a standardized project layout. This saves time getting new people working on the project.
* Provides automatic resolution of dependencies, which are cached so that when you have multiple projects, you don't need to keep making local copies.
* Promotes the concept of a resource repository.
* Can create complex products with minimal direction.
* The build environment is pretty portable. You can generally import a clean Maven Project and build immediately with no need to set up a customized external build environment.
Maven's weaknesses are that some people don't like the standardized layouts, and if you have an unusual type of project, you have to either create your own mojo or embed Ant tasks in the POM. Also Maven is "magic", so there's no real way to tell what maven goals can be used on a particular project. Although, conversely, more goals are generally available than there would have been if you'd had to hand-code them all.
Ant's strengths are:
* Flexibility in project organization. If you're just too superior to use someone else's project structure, you can do your own
* Arbitrarily complex builds. For things where a "canned" set of build rules don't cut it, you can define your own.
* Self-documentation. Since there's no "magic", you can tell fairly precisely what goals are available.
Ant's weaknesses are that you can't get automatic resource resolution with basic Ant (although you can use Ivy), you have to code your own rules in detail for each project, and the build environment is only as portable as the person who designed the build.xml forced it to be.
Mostly these days, I use Maven, since my projects are primarily webapps with a dozen or so dependencies. But I still keep Ant around for more specialized needs.
An IDE is no substitute for an Intelligent Developer.