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.
I have always loved research, too. And I have recently spent some quality time with two software tools that I enjoy — Maven2 and StatCVS.
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.



I don't understand why people have such a hard time with the word "its".
"not without its’ own set" --> "not without its own set"
"it’s plugin architecture" --> "its plugin architecture"
"it’s use" --> "its use"
Remember:
if ("it is" or "it has") then subst("it's") else print("its") // Is that so hard?
Point taken, Trevor. It's my fault :)
Any possibility of publishing your work on a statcvs maven2 plugin? Last time i checked, there was no opensouce plugin available for statcvs and maven2.
Great question, Ryan. I hadn't actually started using the two tools together. There is a Maven1 plugin so it shouldn't be that hard to port? By the way, this plug-in is actually based on StatCVS-XML which appears to be even cooler than StatCVS. Perhaps some interested individuals (like ourselves :) could get the Maven2 plug-in going.
StatCVS is great, but have you found anything comprable with Subversion. I'm trying to write an RS plugin that would grab stuff from Collaboa, but if you know of anything. blog it.
re: Trevor, good catch, but maybe O'Reilly's blog system needs some automated grammar unit tests. :-)
You know, I assumed that the logs were about the same between svn and cvs; but I realized that SVN logs do not have the LOC info that CVS does. You can use MPY SVN STATS but it does not have the detail that you can get from STAT CVS because the data is not contained in the SVN log. I did read one thread that talked about using a commit hook to create such information. Sounds like an opportunity!
Bill - yup, StatCVS is great. I wrote an article for IBM a while back where I used StatCVS to look at the history of Jikes development. Fun stuff!
The StatCVS plugin appears to be there for Maven2:
http://statcvs-xml.berlios.de/maven2-plugin/
There is a statCVS for subversion called statSVN at http://svn.statsvn.org/statsvnwiki/index.php/UserManual