You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2008/02/27 02:26:44 UTC

svn commit: r631455 - in /maven/components/trunk: maven-core/src/main/java/org/apache/maven/ maven-core/src/main/java/org/apache/maven/errors/ maven-core/src/main/java/org/apache/maven/lifecycle/ maven-core/src/main/java/org/apache/maven/lifecycle/plan...

Author: jdcasey
Date: Tue Feb 26 17:26:41 2008
New Revision: 631455

URL: http://svn.apache.org/viewvc?rev=631455&view=rev
Log:
Improve phase-tracking, event dispatching, and align build headers as events dispatched to the default event monitor...also, add debug-level enter/exit phase output in the default event monitor. Finally, refactored code that actually renders the build plan and executes the mojos for each task-segment in the lifecycle executor, to eliminate all the duplication.

This lays the ground work for improving cache management, since I also added event types for embedder control (keep in mind that event monitors can be used to control when the project/model cache is flushed, for example).

Added:
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/DeprecationEventDispatcher.java   (with props)
Modified:
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreReporterManager.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlan.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlanUtils.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/MavenEvents.java
    maven/components/trunk/maven-lifecycle/src/main/java/org/apache/maven/lifecycle/LifecycleUtils.java
    maven/components/trunk/maven-lifecycle/src/main/mdo/maven-lifecycle.mdo
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/ProjectReporterManager.java

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java?rev=631455&r1=631454&r2=631455&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java Tue Feb 26 17:26:41 2008
@@ -45,7 +45,6 @@
         artifacts.add( "jsch" );
         artifacts.add( "maven-artifact" );
         artifacts.add( "maven-artifact-manager" );
-        artifacts.add( "maven-build-context" );
         artifacts.add( "maven-core" );
         artifacts.add( "maven-error-diagnoser" );
         artifacts.add( "maven-lifecycle" );
@@ -59,7 +58,7 @@
         artifacts.add( "maven-reporting-api" );
         artifacts.add( "maven-repository-metadata" );
         artifacts.add( "maven-settings" );
-        //adding shared/maven-toolchain project here, even though not part of the default 
+        //adding shared/maven-toolchain project here, even though not part of the default
         //distro yet.
         artifacts.add( "maven-toolchain" );
         artifacts.add( "plexus-component-api" );

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=631455&r1=631454&r2=631455&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java Tue Feb 26 17:26:41 2008
@@ -33,7 +33,7 @@
 import org.apache.maven.lifecycle.LifecycleExecutionException;
 import org.apache.maven.lifecycle.LifecycleExecutor;
 import org.apache.maven.lifecycle.TaskValidationResult;
-import org.apache.maven.monitor.event.DefaultEventDispatcher;
+import org.apache.maven.monitor.event.DeprecationEventDispatcher;
 import org.apache.maven.monitor.event.EventDispatcher;
 import org.apache.maven.monitor.event.MavenEvents;
 import org.apache.maven.profiles.ProfileManager;
@@ -168,9 +168,9 @@
             return result;
         }
 
-        EventDispatcher dispatcher = new DefaultEventDispatcher( request.getEventMonitors() );
+        EventDispatcher dispatcher = new DeprecationEventDispatcher( MavenEvents.DEPRECATIONS, request.getEventMonitors() );
 
-        String event = MavenEvents.REACTOR_EXECUTION;
+        String event = MavenEvents.MAVEN_EXECUTION;
 
         dispatcher.dispatchStart(
             event,
@@ -197,7 +197,9 @@
 
                 if ( !tvr.isTaskValid() )
                 {
-                    result.addException( tvr.generateInvalidTaskException() );
+                    Exception e = tvr.generateInvalidTaskException();
+                    result.addException( e );
+                    dispatcher.dispatchError( event, request.getBaseDirectory(), e );
 
                     return result;
                 }
@@ -228,11 +230,15 @@
         catch ( LifecycleExecutionException e )
         {
             result.addException( e );
+            dispatcher.dispatchError( event, request.getBaseDirectory(), e );
+
             return result;
         }
         catch ( BuildFailureException e )
         {
             result.addException( e );
+            dispatcher.dispatchError( event, request.getBaseDirectory(), e );
+
             return result;
         }
 
@@ -241,6 +247,8 @@
         result.setProject( reactorManager.getTopLevelProject() );
 
         result.setBuildPlans( session.getBuildPlans() );
+
+        dispatcher.dispatchEnd( event, request.getBaseDirectory() );
 
         return result;
     }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreReporterManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreReporterManager.java?rev=631455&r1=631454&r2=631455&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreReporterManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreReporterManager.java Tue Feb 26 17:26:41 2008
@@ -5,6 +5,7 @@
 public final class CoreReporterManager
 {
 
+    // FIXME: This is not threadsafe!!
     private static CoreErrorReporter reporter;
 
     private CoreReporterManager()

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=631455&r1=631454&r2=631455&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Tue Feb 26 17:26:41 2008
@@ -177,208 +177,162 @@
 
             if ( segment.aggregate() )
             {
-                if ( !reactorManager.isBlackListed( rootProject ) )
-                {
-                    line();
-
-                    getLogger().info( "Building " + rootProject.getName() );
-
-                    getLogger().info( "  " + segment );
+                executeTaskSegmentsForProject( segment, rootProject, reactorManager, dispatcher, session );
+            }
+            else
+            {
+                List sortedProjects = session.getSortedProjects();
 
-                    line();
+                // iterate over projects, and execute on each...
+                for ( Iterator projectIterator = sortedProjects.iterator(); projectIterator.hasNext(); )
+                {
+                    MavenProject currentProject = (MavenProject) projectIterator.next();
 
-                    String target = rootProject.getId() + " ( " + segment + " )";
+                    executeTaskSegmentsForProject( segment, currentProject, reactorManager, dispatcher, session );
+                }
+            }
+        }
+    }
 
-                    getLogger().debug( "Constructing build plan for " + target );
+    private void executeTaskSegmentsForProject( TaskSegment segment,
+                                    MavenProject project,
+                                    ReactorManager reactorManager,
+                                    EventDispatcher dispatcher,
+                                    MavenSession session )
+        throws LifecycleExecutionException, BuildFailureException
+    {
+        if ( !reactorManager.isBlackListed( project ) )
+        {
+//            line();
+//
+//            getLogger().info( "Building " + project.getName() );
+//
+//            getLogger().info( "  " + segment );
+//
+//            line();
 
-                    // !! This is ripe for refactoring to an aspect.
-                    // Event monitoring.
-                    String event = MavenEvents.PROJECT_EXECUTION;
+            String target = project.getName() + "\nId: " + project.getId() + "\n" + segment;
 
-                    long buildStartTime = System.currentTimeMillis();
+            getLogger().debug( "Constructing build plan for " + target );
 
-                    dispatcher.dispatchStart(
-                        event,
-                        target );
+            // !! This is ripe for refactoring to an aspect.
+            // Event monitoring.
+            String event = MavenEvents.PROJECT_EXECUTION;
 
-                    ClassRealm oldLookupRealm = setProjectLookupRealm( session, rootProject );
+            long buildStartTime = System.currentTimeMillis();
 
-                    try
-                    {
-                        session.setCurrentProject( rootProject );
+            dispatcher.dispatchStart(
+                event,
+                target );
 
-                        // NEW: Build up the execution plan, including configuration.
-                        List mojoBindings = getLifecycleBindings(
-                            segment.getTasks(),
-                            rootProject,
-                            session,
-                            target );
+            ClassRealm oldLookupRealm = setProjectLookupRealm( session, project );
 
-                        // NEW: Then, iterate over each binding in that plan, and execute the associated mojo.
-                        // only call once, with the top-level project (assumed to be provided as a parameter)...
-                        for ( Iterator mojoIterator = mojoBindings.iterator(); mojoIterator.hasNext(); )
-                        {
-                            MojoBinding binding = (MojoBinding) mojoIterator.next();
+            try
+            {
+                session.setCurrentProject( project );
 
-                            try
-                            {
-                                executeGoalAndHandleFailures(
-                                    binding,
-                                    session,
-                                    dispatcher,
-                                    event,
-                                    reactorManager,
-                                    buildStartTime,
-                                    target,
-                                    true );
-                            }
-                            catch ( MojoFailureException e )
-                            {
-                                AggregatedBuildFailureException error = new AggregatedBuildFailureException(
-                                                                                                             session.getExecutionRootDirectory(),
-                                                                                                             binding,
-                                                                                                             e );
-
-                                dispatcher.dispatchError( event, target, error );
-
-                                if ( handleExecutionFailure( reactorManager, rootProject, error, binding, buildStartTime ) )
-                                {
-                                    throw error;
-                                }
-                            }
-                        }
-                    }
-                    finally
-                    {
-                        session.setCurrentProject( null );
-                        restoreLookupRealm( oldLookupRealm );
-                    }
+                // NEW: Build up the execution plan, including configuration.
+                List mojoBindings = getLifecycleBindings(
+                    segment.getTasks(),
+                    project,
+                    session,
+                    target );
 
+                String currentPhase = null;
 
-                    reactorManager.registerBuildSuccess(
-                        rootProject,
-                        System.currentTimeMillis() - buildStartTime );
-
-                    dispatcher.dispatchEnd(
-                        event,
-                        target );
-                }
-                else
+                // NEW: Then, iterate over each binding in that plan, and execute the associated mojo.
+                // only call once, with the top-level project (assumed to be provided as a parameter)...
+                for ( Iterator mojoIterator = mojoBindings.iterator(); mojoIterator.hasNext(); )
                 {
-                    line();
+                    MojoBinding binding = (MojoBinding) mojoIterator.next();
 
-                    getLogger().info( "SKIPPING " + rootProject.getName() );
+                    String phase = binding.getPhase() == null ? null : binding.getPhase().getName();
 
-                    getLogger().info( "  " + segment );
-
-                    getLogger().info( "This project has been banned from further executions due to previous failures." );
-
-                    line();
-                }
-            }
-            else
-            {
-                List sortedProjects = session.getSortedProjects();
-
-                // iterate over projects, and execute on each...
-                for ( Iterator projectIterator = sortedProjects.iterator(); projectIterator.hasNext(); )
-                {
-                    MavenProject currentProject = (MavenProject) projectIterator.next();
-
-                    if ( !reactorManager.isBlackListed( currentProject ) )
+                    if ( ( currentPhase != null ) && !currentPhase.equals( phase ) )
                     {
-                        line();
-
-                        getLogger().info( "Building " + currentProject.getName() );
-
-                        getLogger().info( "  " + segment );
-
-                        line();
-
-                        String target = currentProject.getId() + " ( " + segment + " )";
-
-                        // !! This is ripe for refactoring to an aspect.
-                        // Event monitoring.
-                        String event = MavenEvents.PROJECT_EXECUTION;
+                        dispatcher.dispatchEnd( MavenEvents.PHASE_EXECUTION, currentPhase );
+                        currentPhase = null;
+                    }
 
-                        long buildStartTime = System.currentTimeMillis();
+                    if ( ( currentPhase == null ) && ( phase != null ) )
+                    {
+                        currentPhase = phase;
+                        dispatcher.dispatchStart( MavenEvents.PHASE_EXECUTION, currentPhase );
+                    }
 
-                        dispatcher.dispatchStart(
+                    try
+                    {
+                        executeGoalAndHandleFailures(
+                            binding,
+                            session,
+                            dispatcher,
                             event,
-                            target );
-
-                        ClassRealm oldLookupRealm = setProjectLookupRealm( session, currentProject );
-
-                        try
+                            reactorManager,
+                            buildStartTime,
+                            target,
+                            segment.aggregate() );
+                    }
+                    catch ( MojoFailureException e )
+                    {
+                        if ( segment.aggregate() )
                         {
-                            session.setCurrentProject( currentProject );
-
-                            List mojoBindings = getLifecycleBindings(
-                                segment.getTasks(),
-                                currentProject,
-                                session,
-                                target );
-
-                            for ( Iterator mojoIterator = mojoBindings.iterator(); mojoIterator.hasNext(); )
-                            {
-                                MojoBinding binding = (MojoBinding) mojoIterator.next();
-
-                                getLogger().debug(
-                                    "Mojo: " + binding.getGoal() + " has config:\n"
-                                        + binding.getConfiguration() );
-
-                                try
-                                {
-                                    executeGoalAndHandleFailures( binding, session, dispatcher,
-                                                                  event, reactorManager,
-                                                                  buildStartTime, target,
-                                                                  false);
-                                }
-                                catch ( MojoFailureException e )
-                                {
-                                    ProjectBuildFailureException error = new ProjectBuildFailureException(
-                                                                                                           currentProject.getId(),
-                                                                                                           binding,
-                                                                                                           e );
-
-                                    dispatcher.dispatchError( event, target, error );
-
-                                    if ( handleExecutionFailure( reactorManager, currentProject, error, binding, buildStartTime ) )
-                                    {
-                                        throw error;
-                                    }
-                                }
-                            }
+                            AggregatedBuildFailureException error = new AggregatedBuildFailureException(
+                                                                                                        session.getExecutionRootDirectory(),
+                                                                                                        binding,
+                                                                                                        e );
+
+                           dispatcher.dispatchError( event, target, error );
+
+                           if ( handleExecutionFailure( reactorManager, project, error, binding, buildStartTime ) )
+                           {
+                               throw error;
+                           }
                         }
-                        finally
+                        else
                         {
-                            session.setCurrentProject( null );
-                            restoreLookupRealm( oldLookupRealm );
+                            ProjectBuildFailureException error = new ProjectBuildFailureException(
+                                                                                                  project.getId(),
+                                                                                                  binding,
+                                                                                                  e );
+
+                           dispatcher.dispatchError( event, target, error );
+
+                           if ( handleExecutionFailure( reactorManager, project, error, binding, buildStartTime ) )
+                           {
+                               throw error;
+                           }
                         }
+                    }
+                }
 
-                        reactorManager.registerBuildSuccess(
-                            currentProject,
-                            System.currentTimeMillis() - buildStartTime );
+                dispatcher.dispatchEnd( MavenEvents.PHASE_EXECUTION, currentPhase );
+            }
+            finally
+            {
+                session.setCurrentProject( null );
+                restoreLookupRealm( oldLookupRealm );
+            }
 
-                        dispatcher.dispatchEnd(
-                            event,
-                            target );
-                    }
-                    else
-                    {
-                        line();
 
-                        getLogger().info( "SKIPPING " + currentProject.getName() );
+            reactorManager.registerBuildSuccess(
+                project,
+                System.currentTimeMillis() - buildStartTime );
 
-                        getLogger().info( "  " + segment );
+            dispatcher.dispatchEnd(
+                event,
+                target );
+        }
+        else
+        {
+            line();
 
-                        getLogger().info(
-                            "This project has been banned from further executions due to previous failures." );
+            getLogger().info( "SKIPPING " + project.getName() );
 
-                        line();
-                    }
-                }
-            }
+            getLogger().info( "  " + segment );
+
+            getLogger().info( "This project has been banned from further executions due to previous failures." );
+
+            line();
         }
     }
 
@@ -939,7 +893,7 @@
         {
             StringBuffer message = new StringBuffer();
 
-            message.append( " task-segment: [" );
+            message.append( "task-segment: [" );
 
             for ( Iterator it = tasks.iterator(); it.hasNext(); )
             {

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlan.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlan.java?rev=631455&r1=631454&r2=631455&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlan.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlan.java Tue Feb 26 17:26:41 2008
@@ -192,6 +192,8 @@
     public List renderExecutionPlan( final Stack executionStack )
         throws NoSuchPhaseException
     {
+        LifecycleUtils.setupTrackingInfo( bindings );
+
         List plan = new ArrayList();
 
         for ( Iterator it = tasks.iterator(); it.hasNext(); )

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlanUtils.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlanUtils.java?rev=631455&r1=631454&r2=631455&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlanUtils.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlanUtils.java Tue Feb 26 17:26:41 2008
@@ -127,7 +127,18 @@
         StringBuffer listing = new StringBuffer();
 
         listing.append( MojoBindingUtils.toString( binding ) );
-        listing.append( " [executionId: " ).append( binding.getExecutionId() ).append( "]" );
+        listing.append( " [executionId: " ).append( binding.getExecutionId() ).append( ", phase: " );
+
+        if ( ( binding.getPhase() != null ) && ( binding.getPhase().getName() != null ) )
+        {
+            listing.append( binding.getPhase().getName() );
+        }
+        else
+        {
+            listing.append( "None specified" );
+        }
+
+        listing.append( "]" );
 
         if ( extendedInfo )
         {

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java?rev=631455&r1=631454&r2=631455&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java Tue Feb 26 17:26:41 2008
@@ -28,20 +28,66 @@
     extends AbstractSelectiveEventMonitor
 {
 
-    private static final String[] START_EVENTS = {MavenEvents.MOJO_EXECUTION};
+    private static final String[] START_EVENTS = {
+        MavenEvents.PROJECT_EXECUTION,
+        MavenEvents.PHASE_EXECUTION,
+        MavenEvents.MOJO_EXECUTION
+    };
+
+    private static final String[] END_EVENTS = {
+        MavenEvents.PHASE_EXECUTION
+    };
 
     private final Logger logger;
 
     public DefaultEventMonitor( Logger logger )
     {
-        super( START_EVENTS, MavenEvents.NO_EVENTS, MavenEvents.NO_EVENTS );
+        super( START_EVENTS, END_EVENTS, MavenEvents.NO_EVENTS );
 
         this.logger = logger;
     }
 
     protected void doStartEvent( String event, String target, long time )
     {
-        logger.info( "[" + target + "]" );
+        if ( MavenEvents.MOJO_EXECUTION.equals( event ) )
+        {
+            logger.info( "[" + target + "]" );
+        }
+        else if ( MavenEvents.PHASE_EXECUTION.equals( event ) )
+        {
+            logger.debug( line() );
+            logger.debug( "Entering lifecycle phase: " + target );
+            logger.debug( line() );
+        }
+        else if ( MavenEvents.PROJECT_EXECUTION.equals( event ) )
+        {
+            logger.info( line() );
+            String[] targetParts = target.split( "\n" );
+            logger.info( "Building " + targetParts[0] );
+            if ( targetParts.length > 0 )
+            {
+                logger.info( "" );
+                for ( int i = 1; i < targetParts.length; i++ )
+                {
+                    logger.info( targetParts[i] );
+                }
+            }
+            logger.info( line() );
+        }
+    }
+
+    protected void doEndEvent( String event,
+                               String target,
+                               long timestamp )
+    {
+        logger.debug( line() );
+        logger.debug( "Completed lifecycle phase: " + target );
+        logger.debug( line() );
+    }
+
+    private String line()
+    {
+        return "------------------------------------------------------------------------";
     }
 
 }

Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/DeprecationEventDispatcher.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/DeprecationEventDispatcher.java?rev=631455&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/DeprecationEventDispatcher.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/DeprecationEventDispatcher.java Tue Feb 26 17:26:41 2008
@@ -0,0 +1,54 @@
+package org.apache.maven.monitor.event;
+
+import java.util.List;
+import java.util.Map;
+
+public class DeprecationEventDispatcher
+    extends DefaultEventDispatcher
+{
+
+    private final Map deprecatedEventsByReplacement;
+
+    public DeprecationEventDispatcher( Map deprecatedEventsByReplacement )
+    {
+        this.deprecatedEventsByReplacement = deprecatedEventsByReplacement;
+    }
+
+    public DeprecationEventDispatcher( Map deprecatedEventsByReplacement, List eventMonitors )
+    {
+        super( eventMonitors );
+        this.deprecatedEventsByReplacement = deprecatedEventsByReplacement;
+    }
+
+    public void dispatchEnd( String event,
+                             String target )
+    {
+        super.dispatchEnd( event, target );
+        if ( deprecatedEventsByReplacement.containsKey( event ) )
+        {
+            super.dispatchEnd( (String) deprecatedEventsByReplacement.get( event ), target );
+        }
+    }
+
+    public void dispatchError( String event,
+                               String target,
+                               Throwable cause )
+    {
+        super.dispatchError( event, target, cause );
+        if ( deprecatedEventsByReplacement.containsKey( event ) )
+        {
+            super.dispatchError( (String) deprecatedEventsByReplacement.get( event ), target, cause );
+        }
+    }
+
+    public void dispatchStart( String event,
+                               String target )
+    {
+        super.dispatchStart( event, target );
+        if ( deprecatedEventsByReplacement.containsKey( event ) )
+        {
+            super.dispatchStart( (String) deprecatedEventsByReplacement.get( event ), target );
+        }
+    }
+
+}

Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/DeprecationEventDispatcher.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/DeprecationEventDispatcher.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/MavenEvents.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/MavenEvents.java?rev=631455&r1=631454&r2=631455&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/MavenEvents.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/MavenEvents.java Tue Feb 26 17:26:41 2008
@@ -1,5 +1,8 @@
 package org.apache.maven.monitor.event;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,17 +31,37 @@
     public static final String PHASE_EXECUTION = "phase-execute";
     public static final String MOJO_EXECUTION = "mojo-execute";
     public static final String PROJECT_EXECUTION = "project-execute";
+
+    /** @deprecated Use {@link MavenEvents#MAVEN_EXECUTION} instead. */
     public static final String REACTOR_EXECUTION = "reactor-execute";
-    
+    public static final String MAVEN_EXECUTION = "maven-execute";
+
+    public static final String EMBEDDER_LIFECYCLE = "embedder-lifecycle";
+    public static final String EMBEDDER_METHOD = "embedder-method";
+
+    public static final Map DEPRECATIONS;
+
+    static
+    {
+        Map dep = new HashMap();
+
+        dep.put( MAVEN_EXECUTION, REACTOR_EXECUTION );
+
+        DEPRECATIONS = dep;
+    }
+
     public static final String[] ALL_EVENTS = {
         PHASE_EXECUTION,
         MOJO_EXECUTION,
         PROJECT_EXECUTION,
-        REACTOR_EXECUTION
+        REACTOR_EXECUTION,
+        MAVEN_EXECUTION,
+        EMBEDDER_LIFECYCLE,
+        EMBEDDER_METHOD
     };
-    
+
     public static final String[] NO_EVENTS = {};
-    
+
     private MavenEvents()
     {
     }

Modified: maven/components/trunk/maven-lifecycle/src/main/java/org/apache/maven/lifecycle/LifecycleUtils.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-lifecycle/src/main/java/org/apache/maven/lifecycle/LifecycleUtils.java?rev=631455&r1=631454&r2=631455&view=diff
==============================================================================
--- maven/components/trunk/maven-lifecycle/src/main/java/org/apache/maven/lifecycle/LifecycleUtils.java (original)
+++ maven/components/trunk/maven-lifecycle/src/main/java/org/apache/maven/lifecycle/LifecycleUtils.java Tue Feb 26 17:26:41 2008
@@ -12,14 +12,43 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 public class LifecycleUtils
 {
 
     private LifecycleUtils()
     {
+    }
+
+    public static void setupTrackingInfo( final LifecycleBindings bindings )
+    {
+        for ( Iterator bindingIt = bindings.getBindingList().iterator(); bindingIt.hasNext(); )
+        {
+            LifecycleBinding binding = (LifecycleBinding) bindingIt.next();
+
+            if ( binding == null )
+            {
+                continue;
+            }
+
+            LinkedHashMap phaseMap = binding.getOrderedPhaseMapping();
+            for ( Iterator phaseIt = phaseMap.entrySet().iterator(); phaseIt.hasNext(); )
+            {
+                Map.Entry entry = (Entry) phaseIt.next();
+                Phase phase = (Phase) entry.getValue();
+
+                String phaseName = (String) entry.getKey();
+
+                if ( phase != null )
+                {
+                    phase.setLifecycleInfo( phaseName, binding );
+                }
+            }
+        }
     }
 
     public static void setOrigin( final LifecycleBindings bindings, final String origin )

Modified: maven/components/trunk/maven-lifecycle/src/main/mdo/maven-lifecycle.mdo
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-lifecycle/src/main/mdo/maven-lifecycle.mdo?rev=631455&r1=631454&r2=631455&view=diff
==============================================================================
--- maven/components/trunk/maven-lifecycle/src/main/mdo/maven-lifecycle.mdo (original)
+++ maven/components/trunk/maven-lifecycle/src/main/mdo/maven-lifecycle.mdo Tue Feb 26 17:26:41 2008
@@ -116,6 +116,11 @@
         throw new UnsupportedOperationException( "Unsupported in base-class." );
     }
           
+    public java.util.LinkedHashMap getOrderedPhaseMapping()
+    {
+        throw new UnsupportedOperationException( "Unsupported in base-class." );
+    }
+    
     public java.util.List getPhasesInOrder()
     {
         throw new UnsupportedOperationException( "Unsupported in base-class." );
@@ -168,26 +173,24 @@
         return "clean";
     }
           
-    public java.util.List getPhasesInOrder()
+    public java.util.LinkedHashMap getOrderedPhaseMapping()
     {
-        java.util.List phases = new java.util.ArrayList();
-        
-        phases.add( getPreClean() );
-        phases.add( getClean() );
-        phases.add( getPostClean() );
+        java.util.LinkedHashMap phases = new java.util.LinkedHashMap();
+        phases.put( "pre-clean", getPreClean() );
+        phases.put( "clean", getClean() );
+        phases.put( "post-clean", getPostClean() );
         
-        return java.util.Collections.unmodifiableList( phases );
+        return phases;
+    }
+    
+    public java.util.List getPhasesInOrder()
+    {
+        return new java.util.ArrayList( getOrderedPhaseMapping().values() );
     }
     
     public java.util.List getPhaseNamesInOrder()
     {
-        java.util.List phases = new java.util.ArrayList();
-        
-        phases.add( "pre-clean" );
-        phases.add( "clean" );
-        phases.add( "post-clean" );
-        
-        return java.util.Collections.unmodifiableList( phases );
+        return new java.util.ArrayList( getOrderedPhaseMapping().keySet() );
     }
           ]]></code>
         </codeSegment>
@@ -392,66 +395,44 @@
         return "build";
     }
           
-    public java.util.List getPhasesInOrder()
+    public java.util.LinkedHashMap getOrderedPhaseMapping()
     {
-        java.util.List phases = new java.util.ArrayList();
-        
-        phases.add( getValidate() );
-        phases.add( getInitialize() );
-        phases.add( getGenerateSources() );
-        phases.add( getProcessSources() );
-        phases.add( getGenerateResources() );
-        phases.add( getProcessResources() );
-        phases.add( getCompile() );
-        phases.add( getProcessClasses() );
-        phases.add( getGenerateTestSources() );
-        phases.add( getProcessTestSources() );
-        phases.add( getGenerateTestResources() );
-        phases.add( getProcessTestResources() );
-        phases.add( getTestCompile() );
-        phases.add( getProcessTestClasses() );
-        phases.add( getTest() );
-        phases.add( getPreparePackage() );
-        phases.add( getCreatePackage() );
-        phases.add( getPreIntegrationTest() );
-        phases.add( getIntegrationTest() );
-        phases.add( getPostIntegrationTest() );
-        phases.add( getVerify() );
-        phases.add( getInstall() );
-        phases.add( getDeploy() );
+        java.util.LinkedHashMap phases = new java.util.LinkedHashMap();
+        phases.put( "validate", getValidate() );
+        phases.put( "initialize", getInitialize() );
+        phases.put( "generate-sources", getGenerateSources() );
+        phases.put( "process-sources", getProcessSources() );
+        phases.put( "generate-resources", getGenerateResources() );
+        phases.put( "process-resources", getProcessResources() );
+        phases.put( "compile", getCompile() );
+        phases.put( "process-classes", getProcessClasses() );
+        phases.put( "generate-test-sources", getGenerateTestSources() );
+        phases.put( "process-test-sources", getProcessTestSources() );
+        phases.put( "generate-test-resources", getGenerateTestResources() );
+        phases.put( "process-test-resources", getProcessTestResources() );
+        phases.put( "test-compile", getTestCompile() );
+        phases.put( "process-test-classes", getProcessTestClasses() );
+        phases.put( "test", getTest() );
+        phases.put( "prepare-package", getPreparePackage() );
+        phases.put( "package", getCreatePackage() );
+        phases.put( "pre-integration-test", getPreIntegrationTest() );
+        phases.put( "integration-test", getIntegrationTest() );
+        phases.put( "post-integration-test", getPostIntegrationTest() );
+        phases.put( "verify", getVerify() );
+        phases.put( "install", getInstall() );
+        phases.put( "deploy", getDeploy() );
         
-        return java.util.Collections.unmodifiableList( phases );
+        return phases;
+    }
+    
+    public java.util.List getPhasesInOrder()
+    {
+        return new java.util.ArrayList( getOrderedPhaseMapping().values() );
     }
     
     public java.util.List getPhaseNamesInOrder()
     {
-        java.util.List phases = new java.util.ArrayList();
-        
-        phases.add( "validate" );
-        phases.add( "initialize" );
-        phases.add( "generate-sources" );
-        phases.add( "process-sources" );
-        phases.add( "generate-resources" );
-        phases.add( "process-resources" );
-        phases.add( "compile" );
-        phases.add( "process-classes" );
-        phases.add( "generate-test-sources" );
-        phases.add( "process-test-sources" );
-        phases.add( "generate-test-resources" );
-        phases.add( "process-test-resources" );
-        phases.add( "test-compile" );
-        phases.add( "process-test-classes" );
-        phases.add( "test" );
-        phases.add( "prepare-package" );
-        phases.add( "package" );
-        phases.add( "pre-integration-test" );
-        phases.add( "integration-test" );
-        phases.add( "post-integration-test" );
-        phases.add( "verify" );
-        phases.add( "install" );
-        phases.add( "deploy" );
-        
-        return java.util.Collections.unmodifiableList( phases );
+        return new java.util.ArrayList( getOrderedPhaseMapping().keySet() );
     }
           ]]></code>
         </codeSegment>
@@ -503,29 +484,26 @@
     {
         return "site";
     }
-          
-    public java.util.List getPhasesInOrder()
+    
+    public java.util.LinkedHashMap getOrderedPhaseMapping()
     {
-        java.util.List phases = new java.util.ArrayList();
-        
-        phases.add( getPreSite() );
-        phases.add( getSite() );
-        phases.add( getPostSite() );
-        phases.add( getSiteDeploy() );
+        java.util.LinkedHashMap map = new java.util.LinkedHashMap();
+        map.put( "pre-site", getPreSite() );
+        map.put( "site", getSite() );
+        map.put( "post-site", getPostSite() );
+        map.put( "site-deploy", getSiteDeploy() );
         
-        return java.util.Collections.unmodifiableList( phases );
+        return map;
+    }
+    
+    public java.util.List getPhasesInOrder()
+    {
+        return new java.util.ArrayList( getOrderedPhaseMapping().values() );
     }
     
     public java.util.List getPhaseNamesInOrder()
     {
-        java.util.List phases = new java.util.ArrayList();
-        
-        phases.add( "pre-site" );
-        phases.add( "site" );
-        phases.add( "post-site" );
-        phases.add( "site-deploy" );
-        
-        return java.util.Collections.unmodifiableList( phases );
+        return new java.util.ArrayList( getOrderedPhaseMapping().keySet() );
     }
           ]]></code>
         </codeSegment>
@@ -546,6 +524,50 @@
           </association>
         </field>
       </fields>
+      <codeSegments>
+        <codeSegment>
+          <version>1.0.0</version>
+          <code><![CDATA[
+    private String name;
+    private LifecycleBinding lifecycleBinding;
+    
+    /**
+     * Get the name of this phase.
+     */
+    public String getName()
+    {
+        return name;
+    }
+    
+    /**
+     * Get the LifecycleBinding instance to which this Phase belongs.
+     */
+    public LifecycleBinding getLifecycleBinding()
+    {
+        return lifecycleBinding;
+    }
+    
+    /**
+     * Set the name of this phase, and the Lifecycle instance to which is belongs.
+     */
+    public void setLifecycleInfo( String phaseName, LifecycleBinding lifecycleBinding )
+    {
+        this.name = phaseName;
+        this.lifecycleBinding = lifecycleBinding;
+        
+        java.util.List bindings = getBindings();
+        if ( bindings != null )
+        {
+            for( java.util.Iterator it = bindings.iterator(); it.hasNext(); )
+            {
+                MojoBinding binding = (MojoBinding) it.next();
+                binding.setLifecycleInfo( this );
+            }
+        }
+    }
+          ]]></code>
+        </codeSegment>
+      </codeSegments>
     </class>
     <class>
       <name>MojoBinding</name>
@@ -673,6 +695,26 @@
     public void setLateBound( boolean lateBound )
     {
         this.lateBound = lateBound;
+    }
+    
+    private Phase phase;
+    
+    /**
+     * Get the Phase instance to which this MojoBinding is bound. NOTE: In
+     * some cases, the phase name may not be known, or may not exist (as in the
+     * case of a direct mojo invocation from the command line or embedder).
+     */
+    public Phase getPhase()
+    {
+        return phase;
+    }
+    
+    /**
+     * Set the Phase instance to which this MojoBinding is bound.
+     */
+    public void setLifecycleInfo( Phase phase )
+    {
+        this.phase = phase;
     }
           ]]></code>
         </codeSegment>

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/ProjectReporterManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/ProjectReporterManager.java?rev=631455&r1=631454&r2=631455&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/ProjectReporterManager.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/ProjectReporterManager.java Tue Feb 26 17:26:41 2008
@@ -3,6 +3,7 @@
 public final class ProjectReporterManager
 {
 
+    // FIXME: This is not threadsafe!
     private static ProjectErrorReporter reporter;
 
     private ProjectReporterManager()