Brian Fox wrote:

Project Ordering

A project with packaging pom can serve both as a parent POM and as an
aggregator POM. [...] For this reason, the project sorter needs to
be changed to mark an aggregator POM as a dependant of all its
modules.

What happens in the normal case where the pom is both inherited and an
aggregator?

Such a project would be built after its child modules. Basically, the occurrence of <parent> in a POM should no longer establish any kind of dependency between the parent project and the inheriting project, only aggregation would do so.

I wonder if a phase that means "after all my children"
would be better, then you would have current behavior, but you could
use this phase for example to bind an assembly mojo.

This seems to resemble the "summarize" phase from [0], right? My understanding of this idea is that it would result in an execution like:

Aggregator
  Child

1. Aggregator
   a) validate
   b) (...)
   c) deploy
2. Child
   a) validate
   b) (...)
   c) deploy
3. Aggregator
   a) summarize

Note that this "summarize" phase executes completely outside of the regular project lifecycle. In particular, it executes after all other lifecycle phases of the aggregator project. So whatever an assembly mojo attached to the "summarize" phase produces, it would not be visible/consumable by the project's "install" or "deploy" phase, for instance.

That's why I figured we need to distinguish pre-/post-build hooks from summary mojos, the latter being meant to run after all child modules but within the aggregator project's lifecycle.

The other problem I see with the "summarize" phase is: Given a POM that binds a mojo to this phase, should the mojo be run if the user invokes only "mvn validate" or does is it meant to only come to live if we run a later phase like "mvn package"? I mean, how would one define the prerequisite phase that needs to be run before the "summarize" phase should be enabled?

Not entirely related to aggregation, but in the same vein: I think an
annotation for the @execute phase is needed to indicate "fork to this
phase only if it won't be run otherwise, else bind to the phase when
it gets there".

Agreed, I think that's the same issue I mentioned in my answer to Stephens first feedback, look out for @requiresLifecyclePhase. To fork or not to fork is something I would like to discuss separately. Tn the context of aggregation, the question is just what set of projects to fork (if at all).


Benjamin


[0] http://docs.codehaus.org/display/MAVEN/Atypical+Plugin+Use+Cases

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to