I love programming. But I have reached the point in my life where the demands on my time, from my day job as a team lead to my night job as a team Dad, reduce my discretionary programming time to little snippets that I can seem to just grasp for 5 or 10 minutes here or there.
If you like what Ant can do, than Maven can take you to another level. Granted is not without its own set of challenges, but I have come to believe that its benefits outweigh the costs. With Maven I frequently find myself saying “Wow! I didn’t know it could do that!”.
A key benefit of Maven is dependency management. Maven drives your application’s life cycle based on a project object model descriptor (the “pom”). Within the
pom.xml file you specify the external libraries that your application uses and the part of the life cycle, known as the scope that the library is used in. Maven uses this information to know which jars should be packaged with your application and which should not. You also have direct control of the version of each library.
Maven2 added the notion of transitive dependencies. With transitive dependencies, you no longer need to know the dependencies of the libraries you use, Maven discovers that for you. In other words, if your application “A” depends on library “B”, and library “B” depends on libraries “C” and “D”, you only need to tell Maven that you depend on “B”. When you instruct Maven to compile your code, it will see that A needs B, and B needs C and D (and so on) and will download the necessary files from the web.
Another facet of Maven that I like is its plugin architecture. I like the fact that Maven can bootstrap itself when you want to add some feature through a plug-in. Maven will find the plug-in for you. You don’t have to download, unzip, or install anything. Like the dependencies, you can explicitly specify which version of a plug-in you want.
Check out Maven when you have a chance. It is gaining in popularity across the world of open source. But it’s use is very applicable to in-house development as well. In fact, I think most Java-based IT shops can gain a tremendous advantage when using Maven through its promotion of a consistent build-compile-test-deploy life cycle.
The other tool that I have been using is StatCVS. I was trying to figure out how to automate, in some fashion, the creation of release notes. My project is using CVS so I could get a dump of commit messages using
cvs log. But the CVS log output is extremely verbose and certainly not suitable for management or other non-technical parties. The CVS redbook led me to cvs2cl.pl — a PERL script that creates a GNU-style change log from a cvs log. But, I had a hard time getting this running under cygwin so I researched a little more. This search led me to StatCVS. This tool, written in Java, parses a CVS log file and generates a set of web pages containing information gleaned from the log. Among other things, the tool does a nice job of formatting the commit messages, excluding the files that had no changes and grouping commit messages intelligently.
StatCVS also provides statistics based on user. You can see how many commits each developer has made, when those commits were made, as well as files and the number of lines of code affected. While this might seem a bit Orwellian, it really is useful information for a team lead.
All in all, I was pleased with StatCVS. It worked as advertised, made the creation of my release notes much easier, and gave me some information that will help me manage my team more effectively.