Author: jdcasey
Date: Wed Jan 30 10:11:50 2008
New Revision: 616824

URL: http://svn.apache.org/viewvc?rev=616824&view=rev
Log:
Adding the build-plan instance for each project to the session and 
MavenExecutionResponse.

Modified:
    
maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj
    
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/CoreErrorReporter.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionResult.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionResult.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.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/LifecycleExecutionException.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/binding/DefaultLifecycleBindingManager.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlanner.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/DefaultBuildPlanner.java

Modified: 
maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj?rev=616824&r1=616823&r2=616824&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj
 (original)
+++ 
maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj
 Wed Jan 30 10:11:50 2008
@@ -16,12 +16,15 @@
 import org.apache.maven.plugin.InvalidPluginException;
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.plan.BuildPlanner;
+import org.apache.maven.lifecycle.plan.BuildPlan;
 import org.apache.maven.lifecycle.model.MojoBinding;
 import org.apache.maven.lifecycle.statemgmt.StateManagementUtils;
 import org.apache.maven.lifecycle.DefaultLifecycleExecutor;
 import org.apache.maven.lifecycle.LifecycleExecutor;
-import org.apache.maven.lifecycle.LifecycleException;
-import org.apache.maven.lifecycle.LifecycleExecutionException;
+import org.apache.maven.lifecycle.LifecycleLoaderException;
+import org.apache.maven.lifecycle.LifecycleSpecificationException;
+import org.apache.maven.lifecycle.plan.LifecyclePlannerException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.plugin.DefaultPluginManager;
 import org.apache.maven.plugin.PluginManager;
@@ -32,7 +35,6 @@
 import 
org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.configuration.PlexusConfiguration;
 import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
 
 import java.util.List;
 
@@ -44,7 +46,8 @@
         execution( void DefaultLifecycleExecutor.executeGoalAndHandleFailures( 
MojoBinding, .. ) )
         && args( binding, .. );
 
-    private pointcut le_executeGoalAndHandleFailures_withSession( MojoBinding 
binding, MavenSession session ):
+    private pointcut le_executeGoalAndHandleFailures_withSession( MojoBinding 
binding,
+                                                                  MavenSession 
session ):
         execution( void DefaultLifecycleExecutor.executeGoalAndHandleFailures( 
MojoBinding, MavenSession, .. ) )
         && args( binding, session, .. );
 
@@ -56,7 +59,8 @@
         withincode( void PluginManager+.executeMojo( MavenProject, .. ) )
         && args( project, .. );
 
-    after( MojoBinding binding, MavenProject project ) throwing ( 
PluginLoaderException cause ):
+    after( MojoBinding binding,
+           MavenProject project) throwing ( PluginLoaderException cause ):
         ( cflow( le_executeGoalAndHandleFailures( MojoBinding ) )
           || cflow( execution( * LifecycleExecutor+.isTaskValid( .. ) ) ) )
         && execution( * PluginLoader+.loadPlugin( MojoBinding, MavenProject, 
.. ) )
@@ -65,14 +69,17 @@
         getReporter().reportErrorLoadingPlugin( binding, project, cause );
     }
 
-    after( String task, MavenSession session, MavenProject project ) throwing 
( InvalidPluginException cause ):
+    after( String task,
+           MavenSession session,
+           MavenProject project) throwing ( InvalidPluginException cause ):
         execution( private * 
DefaultLifecycleExecutor.getMojoDescriptorForDirectInvocation( String, 
MavenSession, MavenProject ) )
         && args( task, session, project )
     {
         getReporter().reportInvalidPluginForDirectInvocation( task, session, 
project, cause );
     }
 
-    after( MojoBinding binding, MavenProject project ) throwing ( 
MojoExecutionException cause ):
+    after( MojoBinding binding,
+           MavenProject project) throwing ( MojoExecutionException cause ):
         cflow( le_executeGoalAndHandleFailures( binding ) )
         && cflow( pm_executeMojo( project ) )
         && call( void Mojo+.execute() )
@@ -84,7 +91,8 @@
         }
     }
 
-    PluginExecutionException around( MojoBinding binding, MavenProject project 
):
+    PluginExecutionException around( MojoBinding binding,
+                                     MavenProject project ):
         cflow( le_executeGoalAndHandleFailures( binding ) )
         && cflow( pm_executeMojo( project ) )
         && call( PluginExecutionException.new( .., String ) )
@@ -95,7 +103,8 @@
         return cause;
     }
 
-    after( MojoBinding binding, MavenProject project ) throwing ( 
ComponentLookupException cause ):
+    after( MojoBinding binding,
+           MavenProject project) throwing ( ComponentLookupException cause ):
         cflow( le_executeGoalAndHandleFailures( binding ) )
         && cflow( pm_executeMojo( project ) )
         && withincode( Mojo DefaultPluginManager.getConfiguredMojo( .. ) )
@@ -137,22 +146,38 @@
         currentParameter = null;
     }
 
-    private pointcut pm_executeMojoWithSessionAndExec( MavenProject project, 
MojoExecution exec, MavenSession session, DefaultPluginManager manager ):
+    private pointcut pm_executeMojoWithSessionAndExec( MavenProject project,
+                                                       MojoExecution exec,
+                                                       MavenSession session,
+                                                       DefaultPluginManager 
manager ):
         execution( void DefaultPluginManager.executeMojo( MavenProject, 
MojoExecution, MavenSession ) )
         && args( project, exec, session )
         && this( manager );
 
-    after( MojoBinding binding, MavenProject project, MojoExecution exec, 
MavenSession session, DefaultPluginManager manager ) throwing( 
PluginConfigurationException cause ):
+    after( MojoBinding binding,
+           MavenProject project,
+           MojoExecution exec,
+           MavenSession session,
+           DefaultPluginManager manager) throwing( 
PluginConfigurationException cause ):
         cflow( le_executeGoalAndHandleFailures( binding ) )
         && cflow( pm_executeMojoWithSessionAndExec( project, exec, session, 
manager ) )
         && pm_validatePomConfig()
     {
         PathTranslator translator = manager.pathTranslator;
         Logger logger = new ConsoleLogger( Logger.LEVEL_INFO, "error 
reporting" );
-        getReporter().reportAttemptToOverrideUneditableMojoParameter( 
currentParameter, binding, project, session, exec, translator, logger, cause );
+        getReporter().reportAttemptToOverrideUneditableMojoParameter( 
currentParameter,
+                                                                      binding,
+                                                                      project,
+                                                                      session,
+                                                                      exec,
+                                                                      
translator,
+                                                                      logger,
+                                                                      cause );
     }
 
-    PluginParameterException around( MojoBinding binding, MavenProject 
project, List invalidParameters ):
+    PluginParameterException around( MojoBinding binding,
+                                     MavenProject project,
+                                     List invalidParameters ):
         cflow( le_executeGoalAndHandleFailures( binding ) )
         && cflow( pm_executeMojo( project ) )
         && cflow( pm_checkRequiredParameters() )
@@ -174,7 +199,10 @@
         withincode( Object PluginParameterExpressionEvaluator.evaluate( String 
) )
         && args( expression );
 
-    before( MojoBinding binding, MavenProject project, String expression, 
ExpressionEvaluationException err ):
+    before( MojoBinding binding,
+            MavenProject project,
+            String expression,
+            ExpressionEvaluationException err ):
         cflow( le_executeGoalAndHandleFailures( binding ) )
         && cflow( pm_executeMojo( project ) )
         && cflow( pm_checkRequiredParameters() )
@@ -190,7 +218,9 @@
                                                       err );
     }
 
-    after( MojoBinding binding, MavenProject project, String expression ) 
throwing ( Exception cause ):
+    after( MojoBinding binding,
+           MavenProject project,
+           String expression) throwing ( Exception cause ):
         cflow( le_executeGoalAndHandleFailures( binding ) )
         && cflow( pm_executeMojo( project ) )
         && cflow( pm_checkRequiredParameters() )
@@ -199,13 +229,15 @@
         && call( Object ReflectionValueExtractor.evaluate( String, Object ) )
     {
         getReporter().reportReflectionErrorWhileEvaluatingMojoParameter( 
currentParameter,
-                                                      binding,
-                                                      project,
-                                                      expression,
-                                                      cause );
+                                                                         
binding,
+                                                                         
project,
+                                                                         
expression,
+                                                                         cause 
);
     }
 
-    after( MojoBinding binding, MavenProject project, PlexusConfiguration 
config ) throwing( PluginConfigurationException cause ):
+    after( MojoBinding binding,
+           MavenProject project,
+           PlexusConfiguration config) throwing( PluginConfigurationException 
cause ):
         cflow( le_executeGoalAndHandleFailures( binding ) )
         && cflow( pm_executeMojo( project ) )
         && execution( void DefaultPluginManager.populatePluginFields( *, *, 
PlexusConfiguration, .. ) )
@@ -214,22 +246,27 @@
         getReporter().reportErrorApplyingMojoConfiguration( binding, project, 
config, cause );
     }
 
-    private pointcut pm_resolveTransitiveDependencies( MavenProject project, 
String scope ):
+    private pointcut pm_resolveTransitiveDependencies( MavenProject project,
+                                                       String scope ):
         execution( void DefaultPluginManager.resolveTransitiveDependencies( *, 
*, String, *, MavenProject ) )
         && args( *, *, scope, *, project );
 
-    after( MavenProject project, String scope ) throwing( 
ArtifactNotFoundException cause ):
+    after( MavenProject project,
+           String scope) throwing( ArtifactNotFoundException cause ):
         pm_resolveTransitiveDependencies( project, scope )
     {
         getReporter().reportProjectDependenciesNotFound( project, scope, cause 
);
     }
 
-    after( MavenProject project, String scope ) throwing( 
ArtifactResolutionException cause ):
+    after( MavenProject project,
+           String scope) throwing( ArtifactResolutionException cause ):
         pm_resolveTransitiveDependencies( project, scope )
     {
         if ( cause instanceof MultipleArtifactsNotFoundException )
         {
-            getReporter().reportProjectDependenciesNotFound( project, scope, 
(MultipleArtifactsNotFoundException) cause );
+            getReporter().reportProjectDependenciesNotFound( project,
+                                                             scope,
+                                                             
(MultipleArtifactsNotFoundException) cause );
         }
         else
         {
@@ -237,16 +274,39 @@
         }
     }
 
-    private pointcut le_getLifecycleBindings( List tasks, MavenProject 
configuringProject, String targetDescription ):
+    private pointcut le_getLifecycleBindings( List tasks,
+                                              MavenProject configuringProject,
+                                              String targetDescription ):
         execution( List DefaultLifecycleExecutor.getLifecycleBindings( List, 
MavenProject, *, String ) )
         && args( tasks, configuringProject, *, targetDescription );
 
-    before( List tasks, MavenProject configuringProject, String 
targetDescription, LifecycleException cause ):
-        cflow( le_getLifecycleBindings( tasks, configuringProject, 
targetDescription ) )
-        && call( LifecycleExecutionException.new( .., LifecycleException ) )
-        && args( .., cause )
+    BuildPlan around( List tasks,
+                      MavenProject project,
+                      MavenSession session )
+        throws LifecycleLoaderException, LifecycleSpecificationException, 
LifecyclePlannerException:
+            cflow( execution( * DefaultLifecycleExecutor.*( .. ) ) )
+            && execution( BuildPlan BuildPlanner+.constructBuildPlan( List, 
MavenProject, MavenSession ) )
+            && args( tasks, project, session )
     {
-        getReporter().reportErrorFormulatingBuildPlan( tasks, 
configuringProject, targetDescription, cause );
+        try
+        {
+            return proceed( tasks, project, session );
+        }
+        catch ( LifecycleLoaderException cause )
+        {
+            getReporter().reportErrorFormulatingBuildPlan( tasks, project, 
session, cause );
+            throw cause;
+        }
+        catch ( LifecyclePlannerException cause )
+        {
+            getReporter().reportErrorFormulatingBuildPlan( tasks, project, 
session, cause );
+            throw cause;
+        }
+        catch ( LifecycleSpecificationException cause )
+        {
+            getReporter().reportErrorFormulatingBuildPlan( tasks, project, 
session, cause );
+            throw cause;
+        }
     }
 
 }

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=616824&r1=616823&r2=616824&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
 Wed Jan 30 10:11:50 2008
@@ -240,6 +240,8 @@
 
         result.setProject( reactorManager.getTopLevelProject() );
 
+        result.setBuildPlans( session.getBuildPlans() );
+
         return result;
     }
 

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java?rev=616824&r1=616823&r2=616824&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java
 Wed Jan 30 10:11:50 2008
@@ -66,7 +66,7 @@
 
     void reportErrorConfiguringExtensionPluginRealm( Plugin plugin, Model 
originModel, List remoteRepos, MavenExecutionRequest request, 
RealmManagementException cause );
 
-    void reportErrorFormulatingBuildPlan( List tasks, MavenProject 
configuringProject, String targetDescription, LifecycleException cause );
+    void reportErrorFormulatingBuildPlan( List tasks, MavenProject project, 
MavenSession session, LifecycleException cause );
 
     void reportErrorInterpolatingModel( Model model, Map inheritedValues, File 
pomFile, MavenExecutionRequest request, ModelInterpolationException cause );
 

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java?rev=616824&r1=616823&r2=616824&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java
 Wed Jan 30 10:11:50 2008
@@ -747,8 +747,8 @@
     }
 
     public void reportErrorFormulatingBuildPlan( List tasks,
-                                                 MavenProject 
configuringProject,
-                                                 String targetDescription,
+                                                 MavenProject project,
+                                                 MavenSession session,
                                                  LifecycleException cause )
     {
         StringWriter writer = new StringWriter();
@@ -769,21 +769,17 @@
         writer.write( NEWLINE );
         writer.write( NEWLINE );
         writer.write( "Current project:" );
-        writeProjectCoordinate( configuringProject, writer );
+        writeProjectCoordinate( project, writer );
 
         writer.write( NEWLINE );
         writer.write( NEWLINE );
-        writer.write( "Build execution sub-segment:" );
-        writer.write( targetDescription );
-        writer.write( NEWLINE );
-        writer.write( NEWLINE );
         writer.write( "Error message: " );
         writer.write( cause.getMessage() );
         writer.write( NEWLINE );
         writer.write( "Root error message: " );
         writer.write( getRootCause( cause ).getMessage() );
 
-        addTips( CoreErrorTips.getBuildPlanningErrorTips( tasks, 
configuringProject, cause ), writer );
+        addTips( CoreErrorTips.getBuildPlanningErrorTips( tasks, project, 
cause ), writer );
 
         registerBuildError( cause, writer.toString(), cause.getCause() );
     }

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionResult.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionResult.java?rev=616824&r1=616823&r2=616824&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionResult.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionResult.java
 Wed Jan 30 10:11:50 2008
@@ -20,11 +20,13 @@
  */
 
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.lifecycle.plan.BuildPlan;
 import org.apache.maven.project.MavenProject;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 /** @author Jason van Zyl */
 public class DefaultMavenExecutionResult
@@ -40,6 +42,8 @@
 
     private ReactorManager reactorManager;
 
+    private Map buildPlans;
+
     public MavenExecutionResult setProject( MavenProject project )
     {
         this.project = project;
@@ -108,5 +112,20 @@
         this.reactorManager = reactorManager;
 
         return this;
+    }
+
+    public BuildPlan getBuildPlan( String projectId )
+    {
+        return (BuildPlan) buildPlans.get( projectId );
+    }
+
+    public BuildPlan getBuildPlan( MavenProject project )
+    {
+        return (BuildPlan) buildPlans.get( project.getId() );
+    }
+
+    public void setBuildPlans( Map buildPlans )
+    {
+        this.buildPlans = buildPlans;
     }
 }

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionResult.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionResult.java?rev=616824&r1=616823&r2=616824&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionResult.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionResult.java
 Wed Jan 30 10:11:50 2008
@@ -20,9 +20,11 @@
  */
 
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.lifecycle.plan.BuildPlan;
 import org.apache.maven.project.MavenProject;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author Jason van Zyl
@@ -51,4 +53,10 @@
     MavenExecutionResult addException( Throwable e );
 
     boolean hasExceptions();
+
+    BuildPlan getBuildPlan( String projectId );
+
+    BuildPlan getBuildPlan( MavenProject project );
+
+    void setBuildPlans( Map buildPlan );
 }

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java?rev=616824&r1=616823&r2=616824&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
 Wed Jan 30 10:11:50 2008
@@ -20,6 +20,7 @@
  */
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.lifecycle.plan.BuildPlan;
 import org.apache.maven.monitor.event.EventDispatcher;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
@@ -33,6 +34,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -57,10 +59,13 @@
     private MavenExecutionRequest request;
 
     private MavenProject currentProject;
+
     private Stack forkedProjectStack = new Stack();
 
     private Map reports = new LinkedHashMap();
 
+    private Map buildPlans = new HashMap();
+
     public MavenSession( PlexusContainer container,
                          MavenExecutionRequest request,
                          EventDispatcher eventDispatcher,
@@ -249,6 +254,26 @@
         }
 
         return reports.keySet();
+    }
+
+    public BuildPlan getBuildPlan( String projectId )
+    {
+        return (BuildPlan) buildPlans.get( projectId );
+    }
+
+    public BuildPlan getBuildPlan( MavenProject project )
+    {
+        return (BuildPlan) buildPlans.get( project.getId() );
+    }
+
+    public void setBuildPlan( MavenProject project, BuildPlan buildPlan )
+    {
+        buildPlans.put( project.getId(), buildPlan );
+    }
+
+    public Map getBuildPlans()
+    {
+        return buildPlans;
     }
 
 }

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=616824&r1=616823&r2=616824&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
 Wed Jan 30 10:11:50 2008
@@ -130,20 +130,18 @@
             session,
             rootProject );
 
-        // FIXME: This should be handled by the extension scanner.
-//        try
-//        {
-//            Map handlers = findArtifactTypeHandlers( session );
-//
-//            artifactHandlerManager.addHandlers( handlers );
-//        }
-//        catch ( PluginNotFoundException e )
-//        {
-//            throw new LifecycleExecutionException(
-//                "Plugin could not be not found while searching for 
artifact-type handlers.",
-//                rootProject,
-//                e );
-//        }
+        try
+        {
+            buildPlanner.constructInitialProjectBuildPlans( session );
+        }
+        catch ( LifecycleException e )
+        {
+            e.printStackTrace();
+            throw new LifecycleExecutionException(
+                                                   "Failed to construct one or 
more initial build plans."
+                                                                   + " Reason: 
" + e.getMessage(),
+                                                   e );
+        }
 
         executeTaskSegments(
             taskSegments,
@@ -430,7 +428,7 @@
                 getLogger().debug(
                     "\n\nOur build plan is:\n" + BuildPlanUtils.listBuildPlan(
                         plan,
-                        false ) + "\n\n" );
+                        false ) + "\n\nfor task-segment: " + targetDescription 
);
             }
 
             mojoBindings = plan.renderExecutionPlan( new Stack() );

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java?rev=616824&r1=616823&r2=616824&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java
 Wed Jan 30 10:11:50 2008
@@ -91,6 +91,13 @@
         this.project = project;
     }
 
+    public LifecycleExecutionException( String message,
+                                        Throwable cause )
+    {
+        super( message, cause );
+        project = null;
+    }
+
     public MavenProject getProject()
     {
         return project;

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/binding/DefaultLifecycleBindingManager.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/binding/DefaultLifecycleBindingManager.java?rev=616824&r1=616823&r2=616824&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/binding/DefaultLifecycleBindingManager.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/binding/DefaultLifecycleBindingManager.java
 Wed Jan 30 10:11:50 2008
@@ -267,22 +267,15 @@
                                         }
                                         else
                                         {
-                                            StringBuffer message = new 
StringBuffer();
+                                            logger.debug( "Skipping addition 
to build-plan for goal: "
+                                                          + goal
+                                                          + " in execution: "
+                                                          + execution.getId()
+                                                          + " of plugin: "
+                                                          + plugin.getKey()
+                                                          + " because no phase 
information was available (either through the mojo descriptor, which is 
currently missing, or in the POM itself)." );
 
-                                            message.append( "\n\nNo lifecycle 
phase binding can be found for goal: " + goal );
-                                            message.append( ",\nspecified as a 
part of the execution: " + execution.getId() );
-                                            message.append( "\nin plugin: " );
-                                            message.append( plugin.getKey() );
-                                            message.append( "\n\nThis plugin 
could not be resolved, so use of the default lifecycle phase binding " )
-                                                    .append( "\n(if there is 
one) is impossible." );
-                                            message.append( "\n\nPlease ensure 
that the plugin: " )
-                                                   .append( plugin.getKey() )
-                                                   .append( " can be resolved 
by Maven," )
-                                                   .append( "\nthen try 
re-running this build with the -U option " )
-                                                   .append( "\n(to ensure that 
all plugin metadata is refreshed)." );
-                                            message.append( "\n\n" );
-
-                                            throw new 
LifecycleSpecificationException( message.toString() );
+                                            continue;
                                         }
                                     }
                                 }

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlanner.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlanner.java?rev=616824&r1=616823&r2=616824&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlanner.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/BuildPlanner.java
 Wed Jan 30 10:11:50 2008
@@ -22,6 +22,15 @@
     /**
      * Orchestrates construction of the build plan which will be used by the 
user of LifecycleExecutor.
      */
-    BuildPlan constructBuildPlan( List tasks, MavenProject project, 
MavenSession session )
+    BuildPlan constructBuildPlan( List tasks,
+                                  MavenProject project,
+                                  MavenSession session )
+        throws LifecycleLoaderException, LifecycleSpecificationException, 
LifecyclePlannerException;
+
+    void constructInitialProjectBuildPlans( MavenSession session )
+        throws LifecycleLoaderException, LifecycleSpecificationException, 
LifecyclePlannerException;
+
+    BuildPlan constructInitialProjectBuildPlan( MavenProject project,
+                                                MavenSession session )
         throws LifecycleLoaderException, LifecycleSpecificationException, 
LifecyclePlannerException;
 }

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/DefaultBuildPlanner.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/DefaultBuildPlanner.java?rev=616824&r1=616823&r2=616824&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/DefaultBuildPlanner.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/plan/DefaultBuildPlanner.java
 Wed Jan 30 10:11:50 2008
@@ -44,17 +44,56 @@
 
     private MojoBindingFactory mojoBindingFactory;
 
+    public void constructInitialProjectBuildPlans( final MavenSession session )
+        throws LifecycleLoaderException, LifecycleSpecificationException, 
LifecyclePlannerException
+    {
+        for ( Iterator it = session.getSortedProjects().iterator(); 
it.hasNext(); )
+        {
+            MavenProject project = (MavenProject) it.next();
+
+            constructInitialProjectBuildPlan( project, session );
+        }
+    }
+
+    public BuildPlan constructInitialProjectBuildPlan( final MavenProject 
project,
+                                                       final MavenSession 
session )
+        throws LifecycleLoaderException, LifecycleSpecificationException, 
LifecyclePlannerException
+    {
+        BuildPlan plan = session.getBuildPlan( project );
+        if ( plan == null )
+        {
+            plan = constructBuildPlan( Collections.EMPTY_LIST, project, 
session );
+
+            session.setBuildPlan( project, plan );
+        }
+
+        return plan;
+    }
+
     /**
      * Orchestrates construction of the build plan which will be used by the 
user of LifecycleExecutor.
      */
-    public BuildPlan constructBuildPlan( final List tasks, final MavenProject 
project, final MavenSession session )
+    public BuildPlan constructBuildPlan( final List tasks,
+                                         final MavenProject project,
+                                         final MavenSession session )
         throws LifecycleLoaderException, LifecycleSpecificationException, 
LifecyclePlannerException
     {
-        LifecycleBindings defaultBindings = 
lifecycleBindingManager.getDefaultBindings( project );
-        LifecycleBindings packagingBindings = 
lifecycleBindingManager.getBindingsForPackaging( project, session );
-        LifecycleBindings projectBindings = 
lifecycleBindingManager.getProjectCustomBindings( project, session );
+        BuildPlan plan = session.getBuildPlan( project );
 
-        BuildPlan plan = new BuildPlan( packagingBindings, projectBindings, 
defaultBindings, tasks );
+        if ( plan != null )
+        {
+            plan = plan.copy( tasks );
+        }
+        else
+        {
+            LifecycleBindings defaultBindings = 
lifecycleBindingManager.getDefaultBindings( project );
+            LifecycleBindings packagingBindings = 
lifecycleBindingManager.getBindingsForPackaging( project,
+                                                                               
                    session );
+            LifecycleBindings projectBindings = 
lifecycleBindingManager.getProjectCustomBindings( project,
+                                                                               
                   session );
+
+            plan = new BuildPlan( packagingBindings, projectBindings, 
defaultBindings, tasks );
+        }
 
         // initialize/resolve any direct-invocation tasks, if possible.
         initializeDirectInvocations( plan, project, session );
@@ -68,7 +107,9 @@
         return plan;
     }
 
-    private void initializeDirectInvocations( final BuildPlan plan, final 
MavenProject project, final MavenSession session )
+    private void initializeDirectInvocations( final BuildPlan plan,
+                                              final MavenProject project,
+                                              final MavenSession session )
         throws LifecycleSpecificationException, LifecycleLoaderException
     {
         List tasks = plan.getTasks();
@@ -79,7 +120,10 @@
 
             if ( !LifecycleUtils.isValidPhaseName( task ) )
             {
-                MojoBinding binding = mojoBindingFactory.parseMojoBinding( 
task, project, session, true );
+                MojoBinding binding = mojoBindingFactory.parseMojoBinding( 
task,
+                                                                           
project,
+                                                                           
session,
+                                                                           
true );
                 plan.addDirectInvocationBinding( task, binding );
             }
         }
@@ -95,7 +139,10 @@
      * process of injecting any modifiers that are necessary to accommodate 
forked execution.
      * @param callStack
      */
-    private void addForkedLifecycleModifiers( final BuildPlan plan, final 
MavenProject project, MavenSession session, LinkedList callStack )
+    private void addForkedLifecycleModifiers( final BuildPlan plan,
+                                              final MavenProject project,
+                                              MavenSession session,
+                                              LinkedList callStack )
         throws LifecyclePlannerException, LifecycleSpecificationException, 
LifecycleLoaderException
     {
         List planBindings = plan.renderExecutionPlan( new Stack() );
@@ -109,10 +156,17 @@
         }
     }
 
-    private void findForkModifiers( final MojoBinding mojoBinding, final 
BuildPlan plan, final MavenProject project, MavenSession session, LinkedList 
callStack )
+    private void findForkModifiers( final MojoBinding mojoBinding,
+                                    final BuildPlan plan,
+                                    final MavenProject project,
+                                    MavenSession session,
+                                    LinkedList callStack )
         throws LifecyclePlannerException, LifecycleSpecificationException, 
LifecycleLoaderException
     {
-        PluginDescriptor pluginDescriptor = loadPluginDescriptor( mojoBinding, 
plan, project, session );
+        PluginDescriptor pluginDescriptor = loadPluginDescriptor( mojoBinding,
+                                                                  plan,
+                                                                  project,
+                                                                  session );
 
         if ( pluginDescriptor == null )
         {
@@ -122,7 +176,8 @@
         MojoDescriptor mojoDescriptor = pluginDescriptor.getMojo( 
mojoBinding.getGoal() );
         if ( mojoDescriptor == null )
         {
-            throw new LifecyclePlannerException( "Mojo: " + 
mojoBinding.getGoal() + " does not exist in plugin: "
+            throw new LifecyclePlannerException( "Mojo: " + 
mojoBinding.getGoal()
+                                                 + " does not exist in plugin: 
"
                                                  + pluginDescriptor.getId() + 
"." );
         }
 
@@ -136,7 +191,10 @@
      * @param callStack
      * @param session
      */
-    private void addReportingLifecycleModifiers( final BuildPlan plan, final 
MavenProject project, MavenSession session, LinkedList callStack )
+    private void addReportingLifecycleModifiers( final BuildPlan plan,
+                                                 final MavenProject project,
+                                                 MavenSession session,
+                                                 LinkedList callStack )
         throws LifecyclePlannerException, LifecycleSpecificationException, 
LifecycleLoaderException
     {
         List planBindings = plan.renderExecutionPlan( new Stack() );
@@ -146,7 +204,10 @@
         {
             MojoBinding mojoBinding = (MojoBinding) it.next();
 
-            PluginDescriptor pluginDescriptor = loadPluginDescriptor( 
mojoBinding, plan, project, session );
+            PluginDescriptor pluginDescriptor = loadPluginDescriptor( 
mojoBinding,
+                                                                      plan,
+                                                                      project,
+                                                                      session 
);
 
             if ( pluginDescriptor == null )
             {
@@ -156,7 +217,8 @@
             MojoDescriptor mojoDescriptor = pluginDescriptor.getMojo( 
mojoBinding.getGoal() );
             if ( mojoDescriptor == null )
             {
-                throw new LifecyclePlannerException( "Mojo: " + 
mojoBinding.getGoal() + " does not exist in plugin: "
+                throw new LifecyclePlannerException( "Mojo: " + 
mojoBinding.getGoal()
+                                                     + " does not exist in 
plugin: "
                                                      + 
pluginDescriptor.getId() + "." );
             }
 
@@ -172,11 +234,20 @@
                     {
                         MojoBinding reportBinding = (MojoBinding) 
reportBindingIt.next();
 
-                        PluginDescriptor pd = loadPluginDescriptor( 
reportBinding, plan, project, session );
+                        PluginDescriptor pd = loadPluginDescriptor( 
reportBinding,
+                                                                    plan,
+                                                                    project,
+                                                                    session );
 
                         if ( pd != null )
                         {
-                            findForkModifiers( reportBinding, pd, plan, 
project, session, true, callStack );
+                            findForkModifiers( reportBinding,
+                                               pd,
+                                               plan,
+                                               project,
+                                               session,
+                                               true,
+                                               callStack );
                         }
                     }
                 }
@@ -188,8 +259,10 @@
         }
     }
 
-    private PluginDescriptor loadPluginDescriptor( final MojoBinding 
mojoBinding, final BuildPlan plan,
-                                                   final MavenProject project, 
final MavenSession session )
+    private PluginDescriptor loadPluginDescriptor( final MojoBinding 
mojoBinding,
+                                                   final BuildPlan plan,
+                                                   final MavenProject project,
+                                                   final MavenSession session )
     {
         PluginDescriptor pluginDescriptor = null;
         try
@@ -198,9 +271,9 @@
         }
         catch ( PluginLoaderException e )
         {
-            String message =
-                "Failed to load plugin: " + MojoBindingUtils.createPluginKey( 
mojoBinding )
-                                + ". Adding to late-bound plugins 
list.\nReason: " + e.getMessage();
+            String message = "Failed to load plugin: "
+                             + MojoBindingUtils.createPluginKey( mojoBinding )
+                             + ". Adding to late-bound plugins list.\nReason: 
" + e.getMessage();
 
             if ( logger.isDebugEnabled() )
             {
@@ -222,9 +295,13 @@
      * forked execution, along with any new mojos/lifecycles that entails.
      * @param callStack
      */
-    private void findForkModifiers( final MojoBinding mojoBinding, final 
PluginDescriptor pluginDescriptor,
-                                    final BuildPlan plan, final MavenProject 
project, final MavenSession session,
-                                    final boolean includeReportConfig, 
LinkedList callStack )
+    private void findForkModifiers( final MojoBinding mojoBinding,
+                                    final PluginDescriptor pluginDescriptor,
+                                    final BuildPlan plan,
+                                    final MavenProject project,
+                                    final MavenSession session,
+                                    final boolean includeReportConfig,
+                                    LinkedList callStack )
         throws LifecyclePlannerException, LifecycleSpecificationException, 
LifecycleLoaderException
     {
         String referencingGoal = mojoBinding.getGoal();
@@ -233,17 +310,28 @@
 
         if ( mojoDescriptor == null )
         {
-            throw new LifecyclePlannerException( "Cannot find mojo descriptor 
for: " + referencingGoal + " in plugin: "
+            throw new LifecyclePlannerException( "Cannot find mojo descriptor 
for: "
+                                                 + referencingGoal + " in 
plugin: "
                                                  + pluginDescriptor.getId() );
         }
 
         if ( mojoDescriptor.getExecuteGoal() != null )
         {
-            recurseSingleMojoFork( mojoBinding, pluginDescriptor, plan, 
project, includeReportConfig );
+            recurseSingleMojoFork( mojoBinding,
+                                   pluginDescriptor,
+                                   plan,
+                                   project,
+                                   includeReportConfig );
         }
         else if ( mojoDescriptor.getExecutePhase() != null )
         {
-            recursePhaseMojoFork( mojoBinding, pluginDescriptor, plan, 
project, session, includeReportConfig, callStack );
+            recursePhaseMojoFork( mojoBinding,
+                                  pluginDescriptor,
+                                  plan,
+                                  project,
+                                  session,
+                                  includeReportConfig,
+                                  callStack );
         }
     }
 
@@ -257,9 +345,13 @@
      * method to handle the actual plan modification.
      * @param session
      */
-    private void recursePhaseMojoFork( final MojoBinding mojoBinding, final 
PluginDescriptor pluginDescriptor,
-                                       final BuildPlan plan, final 
MavenProject project, final MavenSession session,
-                                       final boolean includeReportConfig, 
LinkedList callStack )
+    private void recursePhaseMojoFork( final MojoBinding mojoBinding,
+                                       final PluginDescriptor pluginDescriptor,
+                                       final BuildPlan plan,
+                                       final MavenProject project,
+                                       final MavenSession session,
+                                       final boolean includeReportConfig,
+                                       LinkedList callStack )
         throws LifecyclePlannerException, LifecycleSpecificationException, 
LifecycleLoaderException
     {
         callStack.addFirst( mojoBinding );
@@ -291,13 +383,15 @@
                 LifecycleBindings overlayBindings;
                 try
                 {
-                    overlayBindings =
-                        lifecycleBindingManager.getPluginLifecycleOverlay( 
pluginDescriptor, executeLifecycle, project );
+                    overlayBindings = 
lifecycleBindingManager.getPluginLifecycleOverlay( pluginDescriptor,
+                                                                               
          executeLifecycle,
+                                                                               
          project );
                 }
                 catch ( LifecycleLoaderException e )
                 {
-                    throw new LifecyclePlannerException( "Failed to load 
overlay lifecycle: " + executeLifecycle
-                                                         + ". Reason: " + 
e.getMessage(), e );
+                    throw new LifecyclePlannerException( "Failed to load 
overlay lifecycle: "
+                                                         + executeLifecycle + 
". Reason: "
+                                                         + e.getMessage(), e );
                 }
 
                 clonedPlan.addLifecycleOverlay( overlayBindings );
@@ -321,8 +415,11 @@
      * method to actually inject the modification.
      * @param callStack
      */
-    private void recurseSingleMojoFork( final MojoBinding mojoBinding, final 
PluginDescriptor pluginDescriptor,
-                                        final BuildPlan plan, final 
MavenProject project, final boolean includeReportConfig )
+    private void recurseSingleMojoFork( final MojoBinding mojoBinding,
+                                        final PluginDescriptor 
pluginDescriptor,
+                                        final BuildPlan plan,
+                                        final MavenProject project,
+                                        final boolean includeReportConfig )
         throws LifecyclePlannerException, LifecycleSpecificationException, 
LifecycleLoaderException
     {
         String referencingGoal = mojoBinding.getGoal();
@@ -339,13 +436,16 @@
         MojoDescriptor otherDescriptor = pluginDescriptor.getMojo( executeGoal 
);
         if ( otherDescriptor == null )
         {
-            throw new LifecyclePlannerException( "Mojo: " + executeGoal + " 
(referenced by: " + referencingGoal
-                                                 + ") does not exist in 
plugin: " + pluginDescriptor.getId() + "." );
+            throw new LifecyclePlannerException( "Mojo: " + executeGoal + " 
(referenced by: "
+                                                 + referencingGoal + ") does 
not exist in plugin: "
+                                                 + pluginDescriptor.getId() + 
"." );
         }
 
-        MojoBinding binding =
-            mojoBindingFactory.createMojoBinding( 
pluginDescriptor.getGroupId(), pluginDescriptor.getArtifactId(),
-                                                  
pluginDescriptor.getVersion(), executeGoal, project );
+        MojoBinding binding = mojoBindingFactory.createMojoBinding( 
pluginDescriptor.getGroupId(),
+                                                                    
pluginDescriptor.getArtifactId(),
+                                                                    
pluginDescriptor.getVersion(),
+                                                                    
executeGoal,
+                                                                    project );
 
         binding.setOrigin( "Forked from " + referencingGoal );
 


Reply via email to