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; }