You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/07/29 23:19:04 UTC

svn commit: r799083 - in /maven/components/trunk/maven-core/src/main/java/org/apache/maven: lifecycle/DefaultLifecycleExecutor.java plugin/MojoExecution.java project/MavenProject.java

Author: bentmann
Date: Wed Jul 29 21:19:03 2009
New Revision: 799083

URL: http://svn.apache.org/viewvc?rev=799083&view=rev
Log:
o Restored forking to other mojo

Modified:
    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/plugin/MojoExecution.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java

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=799083&r1=799082&r2=799083&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 Jul 29 21:19:03 2009
@@ -44,7 +44,10 @@
 import org.apache.maven.plugin.CycleDetectedInPluginGraphException;
 import org.apache.maven.plugin.InvalidPluginDescriptorException;
 import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginConfigurationException;
 import org.apache.maven.plugin.PluginDescriptorParsingException;
 import org.apache.maven.plugin.PluginManager;
 import org.apache.maven.plugin.PluginManagerException;
@@ -192,9 +195,8 @@
 
                 for ( MojoExecution mojoExecution : executionPlan.getExecutions() )
                 {
-                    logger.info( executionDescription( mojoExecution, currentProject ) );
-                    pluginManager.executeMojo( session, mojoExecution );
-                }                         
+                    execute( currentProject, session, mojoExecution );
+                }
                 
             }
             catch ( Exception e )
@@ -229,7 +231,39 @@
             }
         }        
     }        
-        
+
+    private void execute( MavenProject project, MavenSession session, MojoExecution mojoExecution )
+        throws MojoFailureException, MojoExecutionException, PluginConfigurationException, PluginManagerException
+    {
+        MavenProject executionProject = null;
+
+        List<MojoExecution> forkedExecutions = mojoExecution.getForkedExecutions();
+
+        if ( !forkedExecutions.isEmpty() )
+        {
+            executionProject = project.clone();
+
+            session.setCurrentProject( executionProject );
+            try
+            {
+                for ( MojoExecution forkedExecution : forkedExecutions )
+                {
+                    execute( executionProject, session, forkedExecution );
+                }
+            }
+            finally
+            {
+                session.setCurrentProject( project );
+            }
+        }
+
+        project.setExecutionProject( executionProject );
+
+        logger.info( executionDescription( mojoExecution, project ) );
+
+        pluginManager.executeMojo( session, mojoExecution );
+    }
+
     public MavenExecutionPlan calculateExecutionPlan( MavenSession session, String... tasks )
         throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException, CycleDetectedInPluginGraphException, MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException, PluginManagerException
     {
@@ -268,19 +302,34 @@
                 pluginDescriptor.setClassRealm( pluginManager.getPluginRealm( session, pluginDescriptor ) );
             }
 
-            if ( StringUtils.isNotEmpty( mojoDescriptor.isDependencyResolutionRequired() ) )
-            {
-                requiredDependencyResolutionScopes.add( mojoDescriptor.isDependencyResolutionRequired() );
-            }
-
             mojoExecution.setMojoDescriptor( mojoDescriptor );
 
             populateMojoExecutionConfiguration( project, mojoExecution, false );
+
+            calculateForkedExecutions( mojoExecution, project, new HashSet<MojoDescriptor>() );
+
+            collectDependencyResolutionScopes( requiredDependencyResolutionScopes, mojoExecution );
         }
 
         return new MavenExecutionPlan( lifecyclePlan, requiredDependencyResolutionScopes );
     }      
-    
+
+    private void collectDependencyResolutionScopes( Collection<String> requiredDependencyResolutionScopes,
+                                                    MojoExecution mojoExecution )
+    {
+        String requiredDependencyResolutionScope = mojoExecution.getMojoDescriptor().isDependencyResolutionRequired();
+
+        if ( StringUtils.isNotEmpty( requiredDependencyResolutionScope ) )
+        {
+            requiredDependencyResolutionScopes.add( requiredDependencyResolutionScope );
+        }
+
+        for ( MojoExecution forkedExecution : mojoExecution.getForkedExecutions() )
+        {
+            collectDependencyResolutionScopes( requiredDependencyResolutionScopes, forkedExecution );
+        }
+    }
+
     private void calculateExecutionForIndividualGoal( MavenSession session, List<MojoExecution> lifecyclePlan, String goal ) 
         throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException, CycleDetectedInPluginGraphException, MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException
     {
@@ -452,6 +501,44 @@
         }
     }   
 
+    private void calculateForkedExecutions( MojoExecution mojoExecution, MavenProject project,
+                                            Collection<MojoDescriptor> alreadyForkedExecutions )
+        throws MojoNotFoundException
+    {
+        MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+        if ( !alreadyForkedExecutions.add( mojoDescriptor ) )
+        {
+            return;
+        }
+
+        PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
+
+        if ( StringUtils.isNotEmpty( mojoDescriptor.getExecutePhase() ) )
+        {
+            // TODO
+
+        }
+        else if ( StringUtils.isNotEmpty( mojoDescriptor.getExecuteGoal() ) )
+        {
+            String forkedGoal = mojoDescriptor.getExecuteGoal();
+
+            MojoDescriptor forkedMojoDescriptor = pluginDescriptor.getMojo( forkedGoal );
+            if ( forkedMojoDescriptor == null )
+            {
+                throw new MojoNotFoundException( forkedGoal, pluginDescriptor );
+            }
+
+            MojoExecution forkedExecution = new MojoExecution( forkedMojoDescriptor, forkedGoal );
+
+            populateMojoExecutionConfiguration( project, forkedExecution, true );
+
+            calculateForkedExecutions( forkedExecution, project, alreadyForkedExecutions );
+
+            mojoExecution.addForkedExecution( forkedExecution );
+        }
+    }
+
     private String executionDescription( MojoExecution me, MavenProject project )
     {
         PluginDescriptor pd = me.getMojoDescriptor().getPluginDescriptor();

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java?rev=799083&r1=799082&r2=799083&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java Wed Jul 29 21:19:03 2009
@@ -19,6 +19,9 @@
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
@@ -41,7 +44,9 @@
      * this mojo execution is going to run in.
      */
     private String lifecyclePhase;
-    
+
+    private List<MojoExecution> forkedExecutions = new ArrayList<MojoExecution>();
+
     public MojoExecution( Plugin plugin, String goal, String executionId )
     {
         this.plugin = plugin;
@@ -176,4 +181,20 @@
     {
         this.mojoDescriptor = mojoDescriptor;
     }
+
+    public List<MojoExecution> getForkedExecutions()
+    {
+        return forkedExecutions;
+    }
+
+    public void addForkedExecution( MojoExecution forkedExecution )
+    {
+        if ( forkedExecution == null )
+        {
+            throw new IllegalArgumentException( "forked execution missing" );
+        }
+
+        forkedExecutions.add( forkedExecution );
+    }
+
 }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java?rev=799083&r1=799082&r2=799083&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java Wed Jul 29 21:19:03 2009
@@ -1713,11 +1713,20 @@
      * @since 2.0.9
      */
     @Override
-    public Object clone()
-        throws CloneNotSupportedException
+    public MavenProject clone()
     {
-        MavenProject clone = (MavenProject) super.clone();
+        MavenProject clone;
+        try
+        {
+            clone = (MavenProject) super.clone();
+        }
+        catch ( CloneNotSupportedException e )
+        {
+            throw new UnsupportedOperationException( e );
+        }
+
         clone.deepCopy( this );
+
         return clone;
     }