• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Tim Cooke
  • Campbell Ritchie
  • paul wheaton
  • Ron McLeod
  • Devaka Cooray
Sheriffs:
  • Jeanne Boyarsky
  • Liutauras Vilda
  • Paul Clapham
Saloon Keepers:
  • Tim Holloway
  • Carey Brown
  • Piet Souris
Bartenders:

Project dependency management and revision control

 
Ranch Hand
Posts: 1608
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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?
 
Consider Paul's rocket mass heater.
reply
    Bookmark Topic Watch Topic
  • New Topic