I have now submitted my work as a patch attched to MNG3004. It still
only solves MNG3004 (I am considering 2802 a different patch or I'll
never finish anything ;)

The last version can be downloaded from 

http://cloud.github.com/downloads/krosenvold/maven3/apache-maven-3.0-SNAPSHOT-bin.tar.gz

(This version is based on M3 trunk as r890474 - latest as of 10 minutes
ago)

See some docs at http://github.com/krosenvold/maven3.

I would be very happy if someone could review this and hopefully accept
it into the 3.X range.

A few notes to reviewers:

The patch mainly affects DefaultLifecycleExecutor. Since I considered
this class to be way too large I did a large number of "extract class"
operations to this class - splitting it into a large number of (plexus)
components. This is mostly mechanical ide-based operations that does not
change the logic of the code.

The "essence" of the patch can be observed by starting at
DefaultLifecycleExecutor and working into LifecycleWeaveBuilder.

I have also added a significant number of new unit tests, as well as the
existing integration tests that Dan Fabulich wrote. This also includes
tests for some of the old logic that has now become unit-testable. There
are also stubs for most of components extracted from
DefaultLifecycleExecutor, meaning it is possible to unit-test these
further. I have not written tests for *all* the 2000 lines of code that
used to be in DefaultLifeCycleExecutor.

All integration tests run OK - unchanged.

Regarding compatibility:
There MAY be some unforseen/untested comptibility requirements in
DefaultLifecycleExecutor, LifecycleExecutor or MavenExecutionPlan 
that I am now aware of. Re-adding these is trivial if anyone knows
what they are. I have seen some bits and bobs on the wiki, but unsure
if these apply to 3.x.

Understanding this work:

I think of this work as building a foundation on which it is possible
to experiment/exploit further concurrency and constraints. There is
actually a declarative representation of concurrency
relationships/constraints (in DefaultLifecycles), and the
LifecycleWeaveBuilder implements this model. With such a model it should
be fairly simple to express further constraints and also work more on
different scheduling plans. I have no problems seeing this evolve
further into selectable "concurrency strategies" that can be applied to
different kinds of projects (if one shoe cannot be made to not fit all).

As can be seen from the docs (link), not all kinds of plugins are yet 
represented in the model, so this version will not build "any" project.
I have had feedback from several "enterprise" users that have
successfully used this patch to double their reactor build speeds.


Hope someone can spend the time it takes to review this. 

The patch is at http://jira.codehaus.org/browse/MNG-3004 specifically
http://jira.codehaus.org/secure/attachment/46434/mng3004.patch

Kristian



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

Reply via email to