Friday, October 14, 2005

Why I Hate Maven...Continued

In my previous post, I forgot the most glaringly ridiculous part of Maven's feature set...the dependency system. It's all well and good that I can, as a developer, list my application's dependencies somewhere. However, what's the point of a system that flattens the dependency hierarchy? It's a tree so implement it as a tree.

For instance, what happens if you specify Hibernate 3 as a dependency with nothing else listed in an application that does little more than create a session and run a query? You end up with millions of compile and/or runtime errors because Hibernate requires at least 20 libraries.

Why wouldn't specifying Hibernate 3 as a dependency in Maven cause it to generate dependencies automatically for all of the other required libraries?

Like FreeBSD Ports or Gentoo Portage, if you ask for an application or library, the system should automatically resolve everything you need. There's no reason to chase your tail trying to figure out what version of CGLIB is required by Hibernate or what version of ASM is required by CGLIB. Do I even know what those libraries are? No. Should I need to know? Probably helpful but not central to my job.

Attached to the issue of the dependency tree is that of the contents of the JAR files themselves. When you look around in the Maven repository, you find several libraries with a variety of options. One option might include no dependencies, the other might include all dependencies, the library may be split into parts, or the library may have one massive, all-encompassing jar to simplify dependency craziness. Additionally, version numbering is like the wild west.




Post a Comment

<< Home