Meta
I've been spending some up close and personal time with Maven recently. Building Geronimo from source requires it, as does Groovy, ActiveMQ, GeoTools, and the list goes on.
It was one of those technologies that had been in my peripheral vision for some time, but I had never taken the time to explore it in depth. OK, so that's sugar-coating it. It had driven me absolutely *crazy* for years because I didn't get it. Exhibit A:
rosencrantz:~ sdavis$ maven help __ __ | \/ |__ _Apache__ ___ | |\/| / _` \ V / -_) ' \ ~ intelligent projects ~ |_| |_\__,_|\_/\___|_||_| v. 1.1-beta-2 BUILD FAILED Goal 'help' does not exist in this project. Total time : 3 seconds Finished at : Friday, February 17, 2006 2:38:22 PM MST
Everyone was using it, and for the life of me I couldn't figure out why. The sum total of my experience with Maven was one failed build after another due to the magical "repository in the sky" not handing me the JARs I needed to build the project. I just couldn't imagine why genuinely smart people would use a build tool that wasn't deterministic. When I check something out from source -- especially if it is a post-1.0 production codebase -- I expect it to build the first time. No questions asked.
After many failed attempts to build Geronimo from scratch, I decided to dig in my heels and learn it. Over the course of a week, I hounded Bruce Snyder (one of the tech leads on Geronimo) mercilessly. Cell phone, email, IM -- many times until 1am or 2am. Thanks to his limitless patience, I not only have a working customized copy of Geronimo, I also have a new-found respect for Maven.
Now don't get me wrong -- Maven still has plenty of warts. I have versions 1.0.2, 1.1-beta-2, and 2.0.2 all installed -- the latter two are *both* required to build Geronimo from source -- but I think that I finally get it.
My appreciation for Maven is courtesy of Bruce's words of wisdom and those found in the only Maven book on the market: Maven: A Developer's Notebook. (It is dynamite. If you're a Maven newbie, it is indispensable.)
The critical piece that I was missing is that Maven isn't a peer of Ant's, it is a Meta-Ant. Ant requires you to manage every last JAR, classpath, compile flag, and so on. While that gives you an incredible amount of power, it also requires you to micromanage your build down to the very last semicolon and forward slash. Maven is the accumulated knowledge and battle-scars of many Apache contributors wrapped up in a build tool. These folks have been spinning up new software projects for so long that bootstrapping yet another one from bare metal (ala Ant) is wasting their precious bandwidth. Why solve the same, mundane problem over and over again?
Years ago, I used to write Java like a "real man" -- in a text editor like VI or Textpad. But after the explosion of open source libraries and frameworks of the late 1990s, I came to the realization that I wasn't impressing anyone by micromanaging my source code. Having a solid IDE like IntelliJ or Eclipse so radically improves your productivity that I quite simply don't see how you can call yourself a professional developer without using one. There is no shame in not having every last method and argument memorized -- in this day and age, it's simply not possible. And the ease of refactoring your code in these tools makes anything else look positively primitive.
Modern software development is now characterized by leveraging meta-frameworks to their fullest. Whether you're using Ruby on Rails, Spring, or AppFuse, the measure of worth of a developer is "how quickly can you get a solution in place?" That solution isn't greenfield development of components, it is aggregating robust (usually open source) components with your business logic as the glue.
Which, in a roundabout way, reminds me again why I'm working at OpenLogic. BlueGlue brings that same experience to the table. At 180 open source products and counting, BlueGlue allows you to select the open source projects you want to use from a list. It installs them, integrates them, and gets out of your way. I used to micromanage my open source apps -- now I use BlueGlue.
So am I worried that XDoclet or any of the other aforementioned projects will somehow eliminate the need for BlueGlue? Of course not. If those apps are meta, we're Meta-meta. We allow you to install *all* of them, integrate *all* of them, and so much more. In the next release, you'll be able to install Geronimo sources, and Maven 1.x, and Maven 2.x, and a knowledgebase document explaining how do all of the things I struggled to do this week.
Thanks, Maven, for reminding that sometimes it's OK to micromanage, but sometimes it's more important to let go...
Posted on Fri, 17 Feb 2006 16:25 by default (1662 day(s) old)
