Author: jvanzyl
Date: Tue May  5 22:22:06 2009
New Revision: 771991

URL: http://svn.apache.org/viewvc?rev=771991&view=rev
Log:
o slight lifecycle mixup with executions, temporary fix but the bootstrap works

Modified:
    
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java

Modified: 
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=771991&r1=771990&r2=771991&view=diff
==============================================================================
--- 
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
 (original)
+++ 
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
 Tue May  5 22:22:06 2009
@@ -202,7 +202,7 @@
                 logger.info( executionDescription( mojoExecution, project ) );
 //                mojoExecution.getMojoDescriptor().getRealm().display();
 //                System.out.println( "!!!");
-                System.out.println( mojoExecution.getConfiguration() );
+//                System.out.println( mojoExecution.getConfiguration() );
                 pluginManager.executeMojo( session, mojoExecution );
             }
             catch ( PluginExecutionException e )
@@ -278,9 +278,12 @@
         // Create an ordered Map of the phases in the lifecycle to a list of 
mojos to execute.
         Map<String,List<String>> phaseToMojoMapping = new 
LinkedHashMap<String,List<String>>();
         
-        // 4. 
+        // 4.
+        
+        //TODO: need to separate the lifecycles
+        
         for ( String phase : lifecycle.getPhases() )
-        {   
+        {               
             List<String> mojos = new ArrayList<String>(); 
             
             // Bind the mojos in the lifecycle mapping for the packaging to 
the lifecycle itself. If
@@ -293,19 +296,12 @@
                 mojos.add( mojo );
             }
             
-            phaseToMojoMapping.put( phase, mojos );    
-            
-            // We only want to execute up to and including the specified 
lifecycle phase.
-            if ( phase.equals( lifecyclePhase ) )
-            {
-                break;
-            }
+            phaseToMojoMapping.put( phase, mojos );                
         }
-              
-        // 5. 
+         
+        // 5. Just build up the list of mojos that will execute for every 
phase.
         //
-        // We are only interested in the phases that correspond to the 
lifecycle we are trying to run. If we are running the "clean"
-        // lifecycle we are not interested in goals -- like "generate-sources 
-- that belong to the default lifecycle.
+        // This will be useful for having the complete build plan and then we 
can filter/optimize later.
         //
         for( Plugin plugin : project.getBuild().getPlugins() )
         {            
@@ -313,12 +309,23 @@
             {
                 // if the phase is specified then I don't have to go fetch the 
plugin yet and pull it down
                 // to examine the phase it is associated to.                
-                if ( execution.getPhase() != null && 
execution.getPhase().equals( lifecyclePhase ) )
+                if ( execution.getPhase() != null )
                 {
                     for( String goal : execution.getGoals() )
                     {
                         String s = plugin.getGroupId() + ":" + 
plugin.getArtifactId() + ":" + plugin.getVersion() + ":" + goal;
-                        phaseToMojoMapping.get( execution.getPhase() ).add( s 
);
+
+                        if ( phaseToMojoMapping.get( execution.getPhase() ) == 
null )
+                        {
+                            // This is happening because executions in the POM 
are getting mixed into the clean lifecycle
+                            // So for the lifecycle mapping we need a map with 
the phases as keys so we can easily check
+                            // if this phase belongs to the given lifecycle. 
this shows the system is messed up. this
+                            // shouldn't happen.
+                            System.out.println( execution.getPhase() + 
"?????????????");
+                            phaseToMojoMapping.put( execution.getPhase(), new 
ArrayList<String>() );
+                        }
+                        
+                        phaseToMojoMapping.get( execution.getPhase() ).add( s 
);                        
                     }                    
                 }                
                 // if not then i need to grab the mojo descriptor and look at
@@ -330,58 +337,78 @@
                         String s = plugin.getGroupId() + ":" + 
plugin.getArtifactId() + ":" + plugin.getVersion() + ":" + goal;
                         MojoDescriptor md = getMojoDescriptor( s, 
session.getCurrentProject(), session.getLocalRepository() );
                                                 
-                        // need to know if this plugin belongs to a phase in 
the lifecycle that's running
                         if ( md.getPhase() != null && phaseToMojoMapping.get( 
md.getPhase() ) != null )
                         {
                             phaseToMojoMapping.get( md.getPhase() ).add( s );
                         }
-                        
-                        //TODO Here we need to break when we have reached the 
desired phase.
                     }
                 }
             }
         }
-               
-        List<MojoExecution> lifecyclePlan = new ArrayList<MojoExecution>(); 
-                        
-        // We need to turn this into a set of MojoExecutions
-        for( List<String> mojos : phaseToMojoMapping.values() )
+
+        // 6. 
+        //
+        // We are only interested in the phases that correspond to the 
lifecycle we are trying to run. If we are running the "clean"
+        // lifecycle we are not interested in goals -- like "generate-sources 
-- that belong to the default lifecycle.
+        //        
+        
+        // We only want to execute up to and including the specified lifecycle 
phase.
+        // if ( phase.equals( lifecyclePhase ) )
+        //{
+        //    break;
+        //}
+        
+        List<String> phasesWithMojosToExecute = new ArrayList<String>();
+        
+        for( String phase : phaseToMojoMapping.keySet() )
         {
-            for( String mojo : mojos )
+            phasesWithMojosToExecute.addAll( phaseToMojoMapping.get( phase ) );
+            
+            if ( phase.equals( lifecyclePhase ) )
             {
-                // These are bits that look like this:
-                //
-                // 
org.apache.maven.plugins:maven-remote-resources-plugin:1.0:process
-                //
-                MojoDescriptor mojoDescriptor = getMojoDescriptor( mojo, 
project, session.getLocalRepository() );                                
-                
-                MojoExecution mojoExecution = new MojoExecution( 
mojoDescriptor );
-                                
-                String g = 
mojoExecution.getMojoDescriptor().getPluginDescriptor().getGroupId();
-                
-                String a = 
mojoExecution.getMojoDescriptor().getPluginDescriptor().getArtifactId();
-                
-                Plugin p = project.getPlugin( g + ":" + a );
-                
-                for( PluginExecution e : p.getExecutions() )
+                break;
+            }
+        }        
+        
+        
+        // 7. Now we create the correct configuration for the mojo to execute.
+        //TODO: this needs to go to the model builder.
+        
+        List<MojoExecution> lifecyclePlan = new ArrayList<MojoExecution>();
+
+        for ( String mojo : phasesWithMojosToExecute )
+        {
+            // These are bits that look like this:
+            //
+            // 
org.apache.maven.plugins:maven-remote-resources-plugin:1.0:process
+            //
+            MojoDescriptor mojoDescriptor = getMojoDescriptor( mojo, project, 
session.getLocalRepository() );
+
+            MojoExecution mojoExecution = new MojoExecution( mojoDescriptor );
+
+            String g = 
mojoExecution.getMojoDescriptor().getPluginDescriptor().getGroupId();
+
+            String a = 
mojoExecution.getMojoDescriptor().getPluginDescriptor().getArtifactId();
+
+            Plugin p = project.getPlugin( g + ":" + a );
+
+            for ( PluginExecution e : p.getExecutions() )
+            {
+                for ( String goal : e.getGoals() )
                 {
-                    for( String goal : e.getGoals() )
+                    if ( mojoDescriptor.getGoal().equals( goal ) )
                     {
-                        if ( mojoDescriptor.getGoal().equals( goal ) )
-                        {
-                            Xpp3Dom executionConfiguration = (Xpp3Dom) 
e.getConfiguration();
+                        Xpp3Dom executionConfiguration = (Xpp3Dom) 
e.getConfiguration();
 
-                            Xpp3Dom mojoConfiguration =
-                                extractMojoConfiguration( 
executionConfiguration, mojoDescriptor );
+                        Xpp3Dom mojoConfiguration = extractMojoConfiguration( 
executionConfiguration, mojoDescriptor );
 
-                            mojoExecution.setConfiguration( mojoConfiguration 
);
-                        }
+                        mojoExecution.setConfiguration( mojoConfiguration );
                     }
                 }
-                
-                lifecyclePlan.add( mojoExecution );
             }
-        }  
+
+            lifecyclePlan.add( mojoExecution );
+        }
                 
         return lifecyclePlan;
     }  


Reply via email to