You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Peter Kahn <ci...@gmail.com> on 2008/04/16 20:55:00 UTC

Pattern Question - Controlling dependencies for a project made up of many components

What's the common way to deal with the controlling dependencies for a maven2
project that is made up of 20+ sub projects?  I have the following situation
using home grown solution and ant:

- the main project is comprised of about 20 components
- each component has its own CVS module
- some components depend on other components (either as source or as output
-- e.g. cpp headers, jar lib)
- there is a full build where all components are at the same version
- there is a patch build where the not all components are included and each
component may be using a different version
- versions are transformed into CVS tags

So, when I go to build I'd like to avoid having to modify 20 pom files
because it is somewhat error prone.

What are the common ways of dealing with this?

The few I can think of are:
1. a centralized properties file that contains the version for each
component.  The file is fed into the top level pom and propagated downward
via project inheritance.

2. consider each component as its own release and modify the tags/pom
properties individually

3. have a central registry of versions and write a task which the makes each
component build query the registry for its current version and
dependencies.  (sort of a buckminster styled solution).


What solutions and patterns have worked for the large scale maven projects?


-------
I do have another wrinkle, many components need to be built on specific
platforms, so I need to distribute the build. I figure I'll use something
like hudson to accomplish this task, but it does mean that getting the
information about versions to the individual builders will be somewhat
tricky.

The current solution that I'm using centralized module which contains the
properties for the versions, the logic for the component build process
(get/issue build command/store artifacts) and then a distribution system to
get the builds to the necessary builder machines.  It works reasonably well,
but it is a little brittle and maintaining the system for a couple of
different products on a bunch of branches is effort that I'd rather not
expend if something like maven or buckminster can solve this problem for me.


Thanks for the help



-- 
Peter Kahn
citizenkahn@gmail.com
pkahnpie1@AIM
http://citizenkahn.myplaxo.com
Awareness - Intention - Action