Following a post that is best left alone in the dark, I am seeing an upsurge of posts and twits that goes along comparing various build systems, the latest of which is this one I grabed from a twit by builddoctor. From my tiny point-of-view it seems the cyberworld contains two unevenly-sized set of people with an opinion on build systems: Maven haters and maven users. And the funny thing is that the intersection of the two sets is not empty...
As a disclaimer for potential readers, I must confess I fall in latter of the two groups: I have been using maven since ... well, I could not remember precisely so I dug into Apache's archives and found that the oldest available version was 1.0-beta-5, dated from October 2003.
At that time I was undertaking my PhD with Norsys and the LIFL. I think I remember precisely how we encountered Maven at Norsys. We were starting our long road toward software factories and like most people at that time, we were using Ant scripts. We found that our Ant scripts could be generalized and parameterized across various projects, lowering the efforts needed to build, run tests, produce nice reports and package our Java applications.
Then we offered an internship to a student to industrialize that stuff, maybe even to the point where we would have a nice GUI for generating all the build.xml files from a couple of parameters. After a couple of days, our intern and I stumbled upon the maven project and, reviewing the available material, we thought that what we were dreaming of was being implemented by some smart guys from the ASF. So we dropped our homebrew Ant scripts and started writing our projects using Maven.
Of course, we suffered a lot: Maven 1.X was (and probably still is) painful and could very quickly grow into a sour mess, but the benefits we found in standardization of projects structure and process, integration of reports in a single site, and dependency management outweighted the inconvenience of writing programs using XML.
Then came maven 2 which was a huge improvement, even with all its drawbacks and convoluted architecture (ah, the joys of understanding plexus container DI without documentation), and which has kept improving thanks to a large and active community. On this fertile land grew a whole ecosystem which helped streamline and organize large projects: CI, repository and artifacts management (how many companies simply did not manage their dependencies before maven ?), tons of reports, analysis tools, testing frameworks and reporting utilities. None of these are Maven specific of course, but standardized build system helped a lot in propagating those ideas.
And with success came criticism, and sometimes hatred. I feel that Maven hatred is often tied to Java-bashing. The rise of Ruby, Groovy, Scala, RoR and more agile tools, frameworks, languages may slowly push Java and its infrastructure in the realm of legacy code. But this will take time and in the meanwhile Java and maven are here to stay.
My love affair with Maven is akin to the one with Java: It started in passion but quickly lost romantism and quickly degraded into mere friendliness. We stayed closed friends, to the point of going out together and meet other people, but there was no desire anymore to go beyond this mundane relationship. In contrast, I have a passionate but distant love affair with more exotic languages, like Haskell or scala, you know, that girl
So it is for maven: I like it, I use it professionally to the point I can introduce it in some places, when I need to replace a haphazardly thrown together mix of ant and shell scripts, which is often what would be called build system. I gave and wrote courses in french on maven. When I start a project in java or scala, I write a simple to get started quickly. I know how to setup a simple (eg. httpd based) or complex (eg. nexus based) artifact repository. I have written more than a handful of plugins and even contributed some documentation. I went so far as to start using MavenEmbedder and try dabbling with maven's internals with Plexus ! I know it, yet I don't love it (anymore).
I can understand that people find more value in other tools. As said in the article cited in my introduction, Maven's learning curve is steep and, while powerful, is difficult to master and very easy to turn into a mess. But there is one thing I cannot understand, is how one can come to hate maven.
So here comes, at last, the goal of this article: I would like to gather stories about Maven, good or bad, the better or worse being all the more interesting. So if you, gentle reader, want to share a story, a compelling one, complete with all the gory details (eg. how much time you lost/gained with Maven, how much size in build scripts you lost/gained), feel free to drop me a mail (abailly arobase oqube point com) or twit me (abailly, less safe) with a link of your war stories with Maven. If enough people read this article and send me links, I will set up a page, something we could call a Cabinet de Curiosités dedicated to Maven.