Ok, generally I agree that Maven is a good tool, its just that it promises to be a great tool but fails to deliver on its central promise of easy dependency management. The main issues I have with Maven are:
- Poor and misleading documentation,
- Repository hell
When I first started using maven I felt that somehow I must be missing something. I waded through the documentation often getting confused by maven 1 and maven 2 differences. It may be clear to an experienced user what the differences are but to a new user it is easy to miss the small-font reference to maven 1 on the top right menu bar.
In many cases the documentation is plane misleading. Take the documentation for the maven war plugin it says you can use the <targetPath> setting to dictate where the resources files must be copied. I couldn't get this to work. My build would succeed but the file would not be where I wanted it to be. Later I found out I would have to check out the svn version to get this functionality. Why was it in the documentation if it hasn't been released yet? Or at least say so in the documentation and the build should have failed with unknown element.
When using a new plugin you have to read the scant documentation that available and work the rest out via trial and error. This I find very time consuming especially since every developer starting to use maven needs to learn the same lesson.
If they could just use reasonable names for features it would also help. Why. for example, is variable substitution in config files called filtering? Surely something like "variable place holders" or "variable substitution" would be better and easier to search on?
Maven Repository Hell
I don't know about other maven users but the repositories seem to be a complete mess. In many cases jars are missing or the same jar is found under different groupIds. This wouldn't be so bad if it was consistent but sometimes the jars aren't duplicated they just start appearing under a new goupId after a certain version number.
Of course there is nothing more delightful than including a dependency in your pom.xml only to have it include its own pom.xml which doesn't work. I regularly have to edited the downloaded pom of some dependency to remove a version range which cannot be found.
Even better are those empty groupID/artifactIds that contain pom.xml files and sha1 files but no jar. Sometimes I think it would be easier to just download the jar from the appropriate web site and include it on my classpath.
I also find that there is no way to tell if a plugin is a maven 1 or maven 2 plugin. I use www.mvnrepository.com to find jars and plugins I need. I have to include them in the pom.xml and then wait for a null pointer exception to tell if its for maven 1 or maven 2.
The problems with the repositories are particularly irritating as one of maven main selling points is that it ends dependency hell but instead it replaces it with a new tyranny.
Maven Wrap Up
All of this can make using maven very time consuming and frustrating. I do think that maven is a good project but that it could be great if managed correctly.