On Dec 11, 2006, at 7:36 PM, Matt Hogstrom wrote:
Option 1:
Version all modules independently with no association to each other
except through perhaps dependencies.
- Makes releasing hard as coordinating multiple modules is the
responsibility of the consumer
- Makes releasing easy as there is almost no interdependence so
work on different modules can proceed at their own pace.
Option 2:
Version all modules together under a single version number. This
means if we changed JAAC in the above example all other modules
would also be released as -1.1.1 even though they didn't changed.
- This makes releasing easy as all modules get pushed out a once.
- This makes releasing hard as one module that is having trouble or
people don't have time to work on it holds up the whole train.
I'm not sure that either of these options really covers each side of
the issues completely. I think one of the big ones, is from the
consumers side of these artifacts, how many version numbers does one
need to know about to find out what the latest version of each spec
is? Maybe these silly examples might help explain my thinking (or
not)...
I'm Joe Java Developer and I just want the latest and greatest and
don't care about any of the other details. Do I need to know about
~30 versions or one version? Joe's little brother Jimmy is also
learning about all of this too, and he might not know which versions
of specs, versioned independently, are intended to be used together,
and if he picks the wrong versions of some specs that have deps on
other specs which he uses, then his project will end up with multiple
versions of the same specs in his project.
Or lets say I'm Bob Build Master, and I don't know all of the details
about the spec dependencies, I am just responsible for making
releases... do I want to have to manage ~30 projects, releasing them
in the right order when something changes, or do I want one project?
The release build may be frequent or infrequent, Bob doesn't really
care... but he's dealing with so many other builds that its probably
best for him not to really need to worry about it.
Sammy ServletEngine Developer might only care about that JSP or
Servlet specs and specifically only care about when the code changes,
or if Sammy's team was using Maven 2, then he would also care when
the pom's were changed, and in that case they would need to pay
attention to what was actually being released (ie. the release notes)
for specs in either model.
I believe in Joe's, Jimmy's and Bob's case that one version is the
obvious choice. For Sammy, per-module versions may make a little
more sense, though the stretch to using one version may actually be
easier for them to manage, especially if they just want to use the
specs with the latest code and pom changes... otherwise they might
pay more attention to what was actually in the release, and thus one
version or multiple versions would effectively be the same amount of
work for them making it effectively the same.
* * *
Anyways, when it comes down to it... I'm just trying to give some
advise on how I recommend Geronimo setup and maintain its growing
number of projects (and growing number of modules).
Its not "my way or the highway", but more that I think you might want
to travel on the same road to avoid bumps in the future... and I hope
that if you choose not to that Its not too painful to fix the flat
when it occurs.
--jason