+4  A: 

Standard practice with Hudson, at least, is your first option. For one thing, in maven, your build may not work very well if all the projects are not in the reactor together. For another, trying to make them separate builds is going to put you in snapshot-management heck. If one in the middle changes, and you try to build just it, maven will go looking for its dependencies as snapshots. What it gets will depend on the order in which other projects build, and whether you publish snapshots.

If you have so many projects, or such unrelated projects, that building them all is a problem, then I suggest that you need to consider dis-aggregation. Make the parent a separate, released, project, give each of them (or each subgroup of them) a Trunk/Tags/Branches structure, and make them depend on releases, not snapshots.

bmargulies
Thanks, that's very helpful.
James Kingsbery
+2  A: 

The ideal practice would be to run a reactor build to build only the modules containing changes (with the --projects option) and on the modules that depend on them (with the --also-make-dependents option).

But TC doesn't support an equivalent feature for now (check TC 5 EA: Maven 2 dependency triggers not working...) and the good practice is thus to run a full reactor build (you do not want an invidual module to break modules that depends on it without being warned, you want to keep coherent sets of SNAPSHOTS in sync).

Pascal Thivent
Thanks! Does Hudson support the advanced reactor options you linked to?
James Kingsbery
@JamesKingsbery No. But it does offer a similar configuration option (*"Build whenever a SNAPSHOT dependency is built"*).
Pascal Thivent
Cool, thanks a lot.
James Kingsbery