As per usual, it is largely filled with whining about a particular user's difficulty with Maven, and how that is somehow reflective of the technology or philosophy. Normally I wouldn't give these bouts much credence, were it not for the fact that the same discussion has surfaced, oh, about 10 times prior with nary a resolution. Every couple months ago the same points get brought up:
- Maven docs suck
- Maven makes mundane tasks too complex (ie. is cumbersome)
- Maven is only suitable for large projects
- Maven is only suitable for small projects
Maven docs suckTrue, sort of. The Maven website sucks out loud. It is cumbersome to navigate, and doesn't feel so much as being led gently through Maven the Beautiful City, as "wrassled" and "hogtied" to the back of a pickup and drug through Maven the Scattered Trash-Heap. I made a few suggestions on the list, mostly pointing out websites which are easy to navigate (Rails, Spring, Wicket) and then Maven's site. QED, methinks.
If I hear "cookbook" or "taxonomy" as the answer to Maven's documentation problems one more time I'm going to punch the first kitten I see. Set up a goddamn wiki and let people populate it with their own best practices. Stop using Confluence, because it's a pile of steaming elephant shit (A wiki with tight security and roles? No thanks). I guarantee if the front page had a giant link to a MediaWiki installation with bold letters: USER CONTRIBUTED DOCS, people would use it. Hell, I'll even do the first post.
In short my feeling is this: Maven documentation is fine, it's just freaking impossible to navigate. Most plugins are documented well, if you can find them (psst... they're here and here). Or better yet, make them searchable. When I hear "Maven docs suck!" I know what they really mean: "I Googled it and the answer wasn't on the front page!". Moreover, make a good wiki for anyone to post their problems and solutions. Finally, stop using Nabble - because it kills Google.
Maven makes mundane tasks too complex (ie. is cumbersome)Again, this is true, sort of. These are the same complaints I heard about C from ASM users, and C++ from C users, and Java from C++ users, and now, Maven from Ant users. I can do anything I want in Maven... for course, that's because I know the core and most of the plugins fairly well. If I don't know the answer, I know where to find the docs, and finally, check out source code if I really need to know. So to this I can say - it's not Maven that sucks, it's you.
However, this is a terrible attitude to take, and I apologize for whoever wrote the previous paragraph. Because most people just want to get their milk, not buy the whole cow. That is one of Maven's problems. It is not just the documentation that sucks about Maven, it is its usability.
How do you get help from the command-line?
mvn -helpis nearly useless, and the help plugin is nigh-unusable (though, thanks to me, the new "-Dmedium" flag has gone a long way to making it easier). Of course, that is only meaningful if the plugin/goals are commented well, which they often ain't.
How do you write a POM? XML by hand? No way, says I - I write mine in yaml. But more to the point, there is a distinct lack of IDE support. Someone once said about Maven: "working in the command-line is like working in the Stone Age". I can't wholly agree, however, your average user would be fine with a few wizards, or at least, command-line editors (pomtools was a good idea, but kind of died). It's been over 2 years now since the release of Maven 2, and we are just now getting to the point where IDE support is getting decent. Decent, but still a ways to go. Maybe in another 6 months? Stay tuned.
How do you copy a file from point A to point B? This question gets asked probably more than any other. It wouldn't be so funny if it weren't the case that there are nearly a dozen ways to do it. But in this case, it is both a Maven and user problem. A Maven problem because such frequently asked questions should have an easily findable answer. A user problem because these kinds of questions always come from people who don't understand the fundamental shift of Maven in thinking. There are a dozen ways to move a file, because there are a dozen different reasons to move a file. Moving the web.xml file to the packaging directory is done by the war plugin, because it makes sense when creating a war. But it is not done when creating a jar, by default, so it will just sit in your project. If you want to make it move, add it into your src/main/resources directory and viola, it'll get packaged up too. If you want more control, then use the antrun plugin. If you don't like Ant, use jruby or groovy or write some Java code to do it.
One of the problems with Maven is it's run by a bunch of purists, who won't make
mvn -helpjust execute a "help" goal. Or refuse to wave good-bye to the stone-ages and insist on keeping with XML-based configurations. Drools 2 sucks, Drools 3 rocks... why? Because 3 dropped the XML, making the syntax nice and terse. Maven should learn this lesson.
Maven is only suitable for large/small projectsThese aren't really fair complaints, but I hear them often. I use Maven for both large and small projects without much problem, I don't even think about it. Both of these complaints can really be chalked up to user misunderstanding, which then can be chalked up to poor documentation and usability. Which brings us right back to where we started.
This was a fun exercise, but where does that lead us? Back to the same old answers: wait for IDE support, documentation is slowly improving, we need more community support. Finally, may I make a small request? There are at least two commercial companies selling Maven support - can one of you, please, hire a goddamn graphic designer to revamp the homepage? Pleeeeeaaaassseeeee??? It's really, really ugly. This coming from a guy with a plain-white blog.