Why maven sucks!

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

Poor documentation


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.

 

Comments

I even don't find how to create a java web app after spending two hours on its documents.

I hate maven. It depends on to many things. It depends on the network io, well formed xml, remote jars, remote repositories.

Software is supposed to simplify a process. This does the exact opposite.

This is the worst idea anyone has ever had.

The concepts behind maven 2 are great from my point of view. I ve worked on big projects with continuos integration ant and so... .

I build a little maven with ant and i know how difficult dependency management and other things are.

If the repository is broken than the people how upload wrong data's are reasponsable for that and not maven. To avoid this proble you can organize your own repository see at http://nexus.sonatype.org/.

The documentation is not good thats right. I take a look in other maven projects like apache cxf (big project) to understand maven.

At the end i think maven is the best and complete solution for build management it's difficult but build management is not so easy.

So give maven a chance.

guys,

you just don't know how to use maven, and this the only problem. i'm working currently on the third big project with maven and don't have any of the described problems. to setup maven locally on your dev machine is totally easy, you just need to read the instructions on the maven web site. to setup a maven repository in your organization/company is also not difficult, just use Artifactory or similar. to configure your projects to work with maven worked always without any big issues. it becomes difficult though when you have to organize a proper software configuration management process, but this is difficult enough anyway and maven supports that perfectly. it lets you integrate with many tools like cruisecontrol, teamcity, sonar, selenium and others and allows you to automate almost everything in the software development process except the coding itself ;-)

BUT yes, you need knowledge and experience to use all the power maven provides. it's the same with java though - you don't say that java is bad only because you cannot use, right?

You must be a noob.
But you say "hey, lots of people like maven!".
That's because there are LOTS and LOTS of noobs!

Most developers are noobs and always will be.

This is just a fact. Great software is written by the very few.

When I worked in my previous company, every developer understood ant scripts, it is straightforward.
By reading ant script, you understand exactly what will happen next. Well, you can't do it in maven.

In my current company, most developers don't know much about maven scripts, though they are taught to
run basic build commands for certain projects.

I totally don't get why it is made so complicated. The designer tried to help developers by defining
so-called lifecycles and hide build logic from pom.xml, but does it really help or made it much worse??

I like the idea of maven repository, that's the only thing I like about maven.

Maven is not a RAD tool but instead it provides a very flexible and powerful foundation for real world project management. I do agree that sometimes it's unnecessarily complicated and the pom.xml configuration could be a little bit verbose. I've been using Maven for the last four years and I do agree that it takes some effort to learn it, but once you do, things are lot easier than they were before Maven.

Sorry for my bad English, it's not my native language. Actually, English is quite hard for me but still I do not hate it because it's quite useful language...

You have Stockholm Syndrome. Your source code, and especially your external jars, have been kidnapped by Maven.

Because you can't fix the situation without undoing a bunch of your work, you have convinced yourself that it's desirable. It isn't.

Maven is literally worse than nothing. It is an automation tool that requires more time and more manual guidance than just doing the work yourself without any tool at all.

"You just don't know how to use this software" says more about the software than it does about the user. Properly built software should be easy for anyone to learn.

If a SOFTWARE DEVELOPER finds your software too complicated to use, it's too fucking complicated to use.

9 out of 10 people land on Maven page to help with building their project and Mange their "cough** cough** "artifacts", well they end up spending hours and hours learning everything else besides proccess of building and managing "the project".
Maven does a lot of things, it reminds me a automobile that has dishwasher and dryper built into the dashboard.

I don't use tool that tells me how am I supposed to organize my project, neither I will modify my project structure in order to get my "project management/build tool happy", or to get score creeped with its "extra features" especially when I have this precious little thing called ant, and if someone says anything about dependency management,
ask google again and lend on apache Ivy. ant+Ivy is all you really need and its is lot more than every "fanciness" that maven offers

The initial learning curve is probably steep for most people, but hang on a little longer and you will see the beauty and power of maven2. Sometimes the real barrier may be lack of courage instead of maven itself.

When mvn install fails for 80% of the OpenSource Projects I download, I am going to see Maven is a failure and a bad direction for the community. Perhaps it is the best build tool ever once you have you have everything in place, and that is fine in a corporate environment where most of my experience has been. All I know is that anytime I see an open source project using maven I cringe fearing that I am not going to be able to compile without spending significant time on it.

Just to help me feel justified I tried mvn install on a fresh download of a project I have not tried building before while writing this. Lets just say I was feeling pretty comfortable with my comments by the time I was ready to click post.

waiting for the (useless) report generator to finish, eclipse integration sucks the royal wang, packaging all my sources into "snapshots" so I can't click on the damn stack trace. Maven is written by children who should stay out of programming.

with an EJB and a WAR and some dependencies from some Java projects.
With a NORMAL tool I would assume I can get it done with:

create EAR myEAR including WAR myWar, EJB myEJB depends on JAR myJAR1, myJAR2

not in Maven. In fact, I have been surfing for hours trying to find a way, and still I don't get an answer.
The idea is good, the implementation simply appalling.
instead of using and abusing XML, they should have designed a Domain Specific Language and integrate in Groovy. Too bad. Extremely bad.

Yes I agree. I pick up most things pretty easy but I spend endless hours in maven hell trying to figure out how to do just about anything. I'll check the jars into source control to avoid this hell

I agree. I've wasted countless hours trying to work out how to get something as simple as packaging a multi module project to work. The provided documentation is somewhere between a tutorial and a reference manual, but fails to include the good points of either, just including the bad points (non-complete and hard to apply). Inventing own terms doesn't help either (for example, what the hell is a mojo?).

My main issue with the repositories are that they are not complete, and seem to lack an easy / automated way to add missing libraries. I haven't ran into many broken repository entries yet.

I get fuzzy brain. My pulse quickens and one eye rotates back into my head. The *anger* nearly makes my head pop off.

I can't take it. Ant sucks, Maven sucks more and they were trying to *fix* ant right?

Same mistake the SVN folks in replacing CVS. They made it worse.

Multiple indirect layers of crap is still crap. Directly.

Maven is the worse Apache project ever exists. I have wasted countless hours to troubleshoot problems created by this shit!

I think this is a very lame statement, it would have been useful if you actually pointed out the exact problems your facing with maven.
I am not defending maven, I have my own reservations about it. It is an open source project is available freely, free to download, use, free to contribute, support.
Maven might have problems, but the build process management dilemma is 100% real and here to stay. Of course, you can use ANT, but then again you can always use ASSEMBLY for your everyday programming.
So next time, try to have an attitude for positive criticism.
Rome was not built in a day.

I'm not the original poster, but here's where I've wasted my hours:

1. Building tar.gz assemblies: Who would design a tar.gz generator that doesn't have a way to set owner and group? (No, I don't mean fileMode, I mean the tar options like "--owner=root --group=root"). It kind of randomly ends up with different owners and groups. On my Mac the results were different from Linux. OK, so fix it, you say. It's open source, you say. Well, I spent about 2 hours doing so, digging through countless layers of indirection through 2 libraries. I failed at my attempt because "trunk" of plexus-assembly failed to build. Fine, it's trunk, so I'll check out a branch. Nope: the repository for the plexus-assembly branches is broken (only containing 1 file in them). I spent some more time wading through other approaches, such as the unix plugin (doesn't make tar.gz files), doing ant-run (umm, yeah, now we're not even using maven), etc. I ended up with an exec plugin that calls a script to untar the thing, then retar it with the desired owners and groups. Blech.

2. Eclipse plugin. Works like a charm. For a while. Then it mysteriously forgets what Maven is. It drops the maven libraries out of your project. Then it won't even recognize a valid pom.xml to import an existing maven project. Gotta uninstall/reinstall. Fun fun fun.

There are other things I dislike about Maven, but these are the specific places I can say I wasted too much time on.

I have considerable 40+ team members who think the same. Then I taught them how it works, and that just like ant is a build DSL. You can run 100% ant in maven for things you believe maven cannot do. Often after code review the ant in the maven is eliminated because a maven plugin exists. Where there is clearly no maven solution, the ant script is pom'ed and becomes a maven plugin.

I think maven is for slightly more proficient coders, than operational oriented people. i.e. people who can write a sockets layer, rather than just using it.

You have Stockholm Syndrome. Your source code, and especially your external jars, have been kidnapped by Maven.

Because you can't fix the situation without undoing a bunch of your work, you have convinced yourself that it's desirable. It isn't.

Maven is literally worse than nothing. It is an automation tool that requires more time and more manual guidance than just doing the work yourself without any tool at all.

"You just don't know how to use this software" says more about the software than it does about the user. Properly built software should be easy for anyone to learn.

If a SOFTWARE DEVELOPER finds your software too complicated to use, it's too fucking complicated to use.