I have always struggled with preventing duplication in project builds, etc., which leads to the dreaded "many places to fix" in the event of an update. I use Subversion for revision control, and I believe that this is the best RCS available at the moment.
I have also tried, without success, the existing project dependency managers (Ivy,
Maven) which lack the flexibility that is required to express the dependency for any type of project (for example, I write documents in DocBook, not just build jar/war/ear files). The problem of dependency management is a complex one and I propose a solution and service that I believe will benefit all developers.
First, a Subversion repository that is available at all times (with failover) and performs "on-commit" backup - every
unit of work is backed up as it occurs. Also, a project dependency manager that permits expression of project dependencies (that typically, but not necessarily, reside in the RCS). Simply, a commit to the RCS is available from now until forever, always (assuming failover is always up).
A project dependency might be, for example, a "build-jar" - at a particular stage ("tag" in Subversion terminology) or at the "latest" stage dependency that permits project developers to easily obtain everything that is required for building (using Ant) of their
Java projects - in this case, a Jar file - and allowing developers to customise the build or accept the "defaults". These project "build templates" exist for many common scenarios (war, ear, DocBook, etc.) and include integration with a robust process for developing in that project - for example, the build script automatically enforces CheckStyle rules (as you specify the rules themselves as a dependency on a particular configuration). It might also automatically execute unit tests, produce a test report and test coverage report.
This kind of "build" is something that I find myself duplicating over and over. I think providing this service along with a robust RCS would be valuable to any software development organisation.
Alognside the RCS service is a continuous build system (I prefer Luntbuild). This would allow developers to, for example, configure "on-commit" builds with automated notification (email, MSN, etc.) in the event of a build failure. This means that if a commit fails the build, those who are registered for notification, know immediately. Also, the build system would perform the typical "daily build" and the manually triggered "release build".
Setting up this kind of infrastructure would typically be expensive and require broad expert knowledge. I propose this system as a service to all developers and request feedback on its value.
Frankly, I'm tired of repeating the same half-hearted effort and I'm yet to see anything completely fool-proof, easy to use, full of features and flexibility and all the nice things that I dream of to produce high quality software with a process that takes care of all the otherwise boring, repetitive tasks (at least, I haven't seen anything as decent as I propose).
Comments?