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/08/27 01:18:59 UTC
svn commit: r808219 - in /maven/components/trunk:
maven-core/src/main/java/org/apache/maven/lifecycle/
maven-core/src/main/java/org/apache/maven/plugin/
maven-embedder/src/main/java/org/apache/maven/cli/
Author: bentmann
Date: Wed Aug 26 23:18:59 2009
New Revision: 808219
URL: http://svn.apache.org/viewvc?rev=808219&view=rev
Log:
o Restored forking for aggregators
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-embedder/src/main/java/org/apache/maven/cli/ExecutionEventLogger.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=808219&r1=808218&r2=808219&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 Aug 26 23:18:59 2009
@@ -146,6 +146,11 @@
}
}
+ private static String getKey( MavenProject project )
+ {
+ return project.getGroupId() + ':' + project.getArtifactId() + ':' + project.getVersion();
+ }
+
public void execute( MavenSession session )
{
fireEvent( session, null, LifecycleEventCatapult.SESSION_STARTED );
@@ -154,9 +159,13 @@
List<ProjectBuild> projectBuilds;
+ ProjectIndex projectIndex;
+
try
{
projectBuilds = calculateProjectBuilds( session );
+
+ projectIndex = new ProjectIndex( session.getProjects() );
}
catch ( Exception e )
{
@@ -258,7 +267,7 @@
for ( MojoExecution mojoExecution : executionPlan.getExecutions() )
{
- execute( currentProject, session, mojoExecution );
+ execute( session, mojoExecution, projectIndex );
}
long buildEndTime = System.currentTimeMillis();
@@ -308,7 +317,7 @@
fireEvent( session, null, LifecycleEventCatapult.SESSION_ENDED );
}
- private void execute( MavenProject project, MavenSession session, MojoExecution mojoExecution )
+ private void execute( MavenSession session, MojoExecution mojoExecution, ProjectIndex projectIndex )
throws MojoFailureException, MojoExecutionException, PluginConfigurationException, PluginManagerException
{
MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
@@ -328,29 +337,49 @@
}
}
- MavenProject executionProject = null;
+ List<MavenProject> forkedProjects = Collections.emptyList();
- List<MojoExecution> forkedExecutions = mojoExecution.getForkedExecutions();
+ Map<String, List<MojoExecution>> forkedExecutions = mojoExecution.getForkedExecutions();
if ( !forkedExecutions.isEmpty() )
{
fireEvent( session, mojoExecution, LifecycleEventCatapult.FORK_STARTED );
+ MavenProject project = session.getCurrentProject();
+
+ forkedProjects = new ArrayList<MavenProject>( forkedExecutions.size() );
+
try
{
- executionProject = project.clone();
-
- session.setCurrentProject( executionProject );
- try
+ for ( Map.Entry<String, List<MojoExecution>> fork : forkedExecutions.entrySet() )
{
- for ( MojoExecution forkedExecution : forkedExecutions )
+ int index = projectIndex.indices.get( fork.getKey() );
+
+ MavenProject forkedProject = projectIndex.projects.get( fork.getKey() );
+
+ forkedProjects.add( forkedProject );
+
+ MavenProject executedProject = forkedProject.clone();
+
+ forkedProject.setExecutionProject( executedProject );
+
+ try
{
- execute( executionProject, session, forkedExecution );
+ session.setCurrentProject( executedProject );
+ session.getProjects().set( index, executedProject );
+ projectIndex.projects.put( fork.getKey(), executedProject );
+
+ for ( MojoExecution forkedExecution : fork.getValue() )
+ {
+ execute( session, forkedExecution, projectIndex );
+ }
+ }
+ finally
+ {
+ projectIndex.projects.put( fork.getKey(), forkedProject );
+ session.getProjects().set( index, forkedProject );
+ session.setCurrentProject( project );
}
- }
- finally
- {
- session.setCurrentProject( project );
}
fireEvent( session, mojoExecution, LifecycleEventCatapult.FORK_SUCCEEDED );
@@ -385,8 +414,6 @@
try
{
- project.setExecutionProject( executionProject );
-
pluginManager.executeMojo( session, mojoExecution );
fireEvent( session, mojoExecution, LifecycleEventCatapult.MOJO_SUCCEEDED );
@@ -415,6 +442,37 @@
throw e;
}
+ finally
+ {
+ for ( MavenProject forkedProject : forkedProjects )
+ {
+ forkedProject.setExecutionProject( null );
+ }
+ }
+ }
+
+ private static final class ProjectIndex
+ {
+
+ Map<String, MavenProject> projects;
+
+ Map<String, Integer> indices;
+
+ ProjectIndex( List<MavenProject> projects )
+ {
+ this.projects = new HashMap<String, MavenProject>( projects.size() * 2 );
+ this.indices = new HashMap<String, Integer>( projects.size() * 2 );
+
+ for ( int i = 0; i < projects.size(); i++ )
+ {
+ MavenProject project = projects.get( i );
+ String key = getKey( project );
+
+ this.projects.put( key, project );
+ this.indices.put( key, Integer.valueOf( i ) );
+ }
+ }
+
}
private List<ProjectBuild> calculateProjectBuilds( MavenSession session )
@@ -579,6 +637,12 @@
return mojoDescriptor.isAggregator() || !mojoDescriptor.isProjectRequired();
}
+ private boolean isForkingMojo( MojoDescriptor mojoDescriptor )
+ {
+ return StringUtils.isNotEmpty( mojoDescriptor.getExecuteGoal() )
+ || StringUtils.isNotEmpty( mojoDescriptor.getExecutePhase() );
+ }
+
private static final class ProjectBuild
{
@@ -700,9 +764,12 @@
requiredDependencyResolutionScopes.add( requiredDependencyResolutionScope );
}
- for ( MojoExecution forkedExecution : mojoExecution.getForkedExecutions() )
+ for ( List<MojoExecution> forkedExecutions : mojoExecution.getForkedExecutions().values() )
{
- collectDependencyResolutionScopes( requiredDependencyResolutionScopes, forkedExecution );
+ for ( MojoExecution forkedExecution : forkedExecutions )
+ {
+ collectDependencyResolutionScopes( requiredDependencyResolutionScopes, forkedExecution );
+ }
}
}
@@ -796,145 +863,213 @@
{
MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+ if ( !isForkingMojo( mojoDescriptor ) )
+ {
+ return;
+ }
+
if ( !alreadyForkedExecutions.add( mojoDescriptor ) )
{
return;
}
- PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
+ List<MavenProject> forkedProjects;
- if ( StringUtils.isNotEmpty( mojoDescriptor.getExecutePhase() ) )
+ if ( isAggregatorMojo( mojoDescriptor ) )
{
- String forkedPhase = mojoDescriptor.getExecutePhase();
+ forkedProjects = session.getProjects();
+ }
+ else
+ {
+ forkedProjects = Collections.singletonList( project );
+ }
- Map<String, List<MojoExecution>> lifecycleMappings =
- calculateLifecycleMappings( session, project, forkedPhase );
+ for ( MavenProject forkedProject : forkedProjects )
+ {
+ List<MojoExecution> forkedExecutions;
- for ( List<MojoExecution> forkedExecutions : lifecycleMappings.values() )
+ if ( StringUtils.isNotEmpty( mojoDescriptor.getExecutePhase() ) )
{
- for ( MojoExecution forkedExecution : forkedExecutions )
- {
- if ( forkedExecution.getMojoDescriptor() == null )
- {
- MojoDescriptor forkedMojoDescriptor =
- pluginManager.getMojoDescriptor( forkedExecution.getPlugin(), forkedExecution.getGoal(),
- getRepositoryRequest( session, project ) );
+ forkedExecutions =
+ calculateForkedLifecycle( mojoExecution, session, forkedProject, alreadyForkedExecutions );
+ }
+ else
+ {
+ forkedExecutions = calculateForkedGoal( mojoExecution, session, forkedProject, alreadyForkedExecutions );
+ }
- forkedExecution.setMojoDescriptor( forkedMojoDescriptor );
- }
+ mojoExecution.addForkedExecutions( getKey( forkedProject ), forkedExecutions );
+ }
+ }
- populateMojoExecutionConfiguration( project, forkedExecution, false );
- }
- }
+ private List<MojoExecution> calculateForkedGoal( MojoExecution mojoExecution, MavenSession session,
+ MavenProject project,
+ Collection<MojoDescriptor> alreadyForkedExecutions )
+ throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
- String forkedLifecycle = mojoDescriptor.getExecuteLifecycle();
+ PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
- if ( StringUtils.isNotEmpty( forkedLifecycle ) )
- {
- org.apache.maven.plugin.lifecycle.Lifecycle lifecycleOverlay;
+ String forkedGoal = mojoDescriptor.getExecuteGoal();
- try
- {
- lifecycleOverlay = pluginDescriptor.getLifecycleMapping( forkedLifecycle );
- }
- catch ( IOException e )
- {
- throw new PluginDescriptorParsingException( pluginDescriptor.getPlugin(), e );
- }
- catch ( XmlPullParserException e )
- {
- throw new PluginDescriptorParsingException( pluginDescriptor.getPlugin(), e );
- }
+ MojoDescriptor forkedMojoDescriptor = pluginDescriptor.getMojo( forkedGoal );
+ if ( forkedMojoDescriptor == null )
+ {
+ throw new MojoNotFoundException( forkedGoal, pluginDescriptor );
+ }
- if ( lifecycleOverlay == null )
- {
- throw new LifecycleNotFoundException( forkedLifecycle );
- }
+ MojoExecution forkedExecution = new MojoExecution( forkedMojoDescriptor, forkedGoal );
- for ( Phase phase : lifecycleOverlay.getPhases() )
- {
- List<MojoExecution> forkedExecutions = lifecycleMappings.get( phase.getId() );
- if ( forkedExecutions != null )
- {
- for ( Execution execution : phase.getExecutions() )
- {
- for ( String goal : execution.getGoals() )
- {
- MojoDescriptor forkedMojoDescriptor;
+ populateMojoExecutionConfiguration( project, forkedExecution, true );
- if ( goal.indexOf( ':' ) < 0 )
- {
- forkedMojoDescriptor = pluginDescriptor.getMojo( goal );
- if ( forkedMojoDescriptor == null )
- {
- throw new MojoNotFoundException( goal, pluginDescriptor );
- }
- }
- else
- {
- forkedMojoDescriptor = getMojoDescriptor( goal, session, project );
- }
-
- MojoExecution forkedExecution =
- new MojoExecution( forkedMojoDescriptor, mojoExecution.getExecutionId() );
+ extractMojoConfiguration( forkedExecution );
- Xpp3Dom forkedConfiguration = (Xpp3Dom) execution.getConfiguration();
+ calculateForkedExecutions( forkedExecution, session, project, alreadyForkedExecutions );
- forkedExecution.setConfiguration( forkedConfiguration );
+ return Collections.singletonList( forkedExecution );
+ }
- populateMojoExecutionConfiguration( project, forkedExecution, true );
+ private List<MojoExecution> calculateForkedLifecycle( MojoExecution mojoExecution, MavenSession session,
+ MavenProject project,
+ Collection<MojoDescriptor> alreadyForkedExecutions )
+ throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
- forkedExecutions.add( forkedExecution );
- }
- }
+ String forkedPhase = mojoDescriptor.getExecutePhase();
- Xpp3Dom phaseConfiguration = (Xpp3Dom) phase.getConfiguration();
- if ( phaseConfiguration != null )
- {
- for ( MojoExecution forkedExecution : forkedExecutions )
- {
- Xpp3Dom forkedConfiguration = forkedExecution.getConfiguration();
+ Map<String, List<MojoExecution>> lifecycleMappings = calculateLifecycleMappings( session, project, forkedPhase );
- forkedConfiguration = Xpp3Dom.mergeXpp3Dom( phaseConfiguration, forkedConfiguration );
+ for ( List<MojoExecution> forkedExecutions : lifecycleMappings.values() )
+ {
+ for ( MojoExecution forkedExecution : forkedExecutions )
+ {
+ if ( forkedExecution.getMojoDescriptor() == null )
+ {
+ MojoDescriptor forkedMojoDescriptor =
+ pluginManager.getMojoDescriptor( forkedExecution.getPlugin(), forkedExecution.getGoal(),
+ getRepositoryRequest( session, project ) );
- forkedExecution.setConfiguration( forkedConfiguration );
- }
- }
- }
+ forkedExecution.setMojoDescriptor( forkedMojoDescriptor );
}
+
+ populateMojoExecutionConfiguration( project, forkedExecution, false );
}
+ }
- for ( List<MojoExecution> forkedExecutions : lifecycleMappings.values() )
+ injectLifecycleOverlay( lifecycleMappings, mojoExecution, session, project );
+
+ List<MojoExecution> mojoExecutions = new ArrayList<MojoExecution>();
+
+ for ( List<MojoExecution> forkedExecutions : lifecycleMappings.values() )
+ {
+ for ( MojoExecution forkedExecution : forkedExecutions )
{
- for ( MojoExecution forkedExecution : forkedExecutions )
- {
- extractMojoConfiguration( forkedExecution );
+ extractMojoConfiguration( forkedExecution );
- calculateForkedExecutions( forkedExecution, session, project, alreadyForkedExecutions );
+ calculateForkedExecutions( forkedExecution, session, project, alreadyForkedExecutions );
- mojoExecution.addForkedExecution( forkedExecution );
- }
+ mojoExecutions.add( forkedExecution );
}
}
- else if ( StringUtils.isNotEmpty( mojoDescriptor.getExecuteGoal() ) )
+
+ return mojoExecutions;
+ }
+
+ private void injectLifecycleOverlay( Map<String, List<MojoExecution>> lifecycleMappings,
+ MojoExecution mojoExecution, MavenSession session, MavenProject project )
+ throws PluginDescriptorParsingException, LifecycleNotFoundException, MojoNotFoundException,
+ PluginNotFoundException, PluginResolutionException, NoPluginFoundForPrefixException,
+ InvalidPluginDescriptorException, PluginVersionResolutionException
+ {
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+ PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
+
+ String forkedLifecycle = mojoDescriptor.getExecuteLifecycle();
+
+ if ( StringUtils.isEmpty( forkedLifecycle ) )
{
- String forkedGoal = mojoDescriptor.getExecuteGoal();
+ return;
+ }
+
+ org.apache.maven.plugin.lifecycle.Lifecycle lifecycleOverlay;
+
+ try
+ {
+ lifecycleOverlay = pluginDescriptor.getLifecycleMapping( forkedLifecycle );
+ }
+ catch ( IOException e )
+ {
+ throw new PluginDescriptorParsingException( pluginDescriptor.getPlugin(), e );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new PluginDescriptorParsingException( pluginDescriptor.getPlugin(), e );
+ }
+
+ if ( lifecycleOverlay == null )
+ {
+ throw new LifecycleNotFoundException( forkedLifecycle );
+ }
+
+ for ( Phase phase : lifecycleOverlay.getPhases() )
+ {
+ List<MojoExecution> forkedExecutions = lifecycleMappings.get( phase.getId() );
- MojoDescriptor forkedMojoDescriptor = pluginDescriptor.getMojo( forkedGoal );
- if ( forkedMojoDescriptor == null )
+ if ( forkedExecutions != null )
{
- throw new MojoNotFoundException( forkedGoal, pluginDescriptor );
- }
+ for ( Execution execution : phase.getExecutions() )
+ {
+ for ( String goal : execution.getGoals() )
+ {
+ MojoDescriptor forkedMojoDescriptor;
- MojoExecution forkedExecution = new MojoExecution( forkedMojoDescriptor, forkedGoal );
+ if ( goal.indexOf( ':' ) < 0 )
+ {
+ forkedMojoDescriptor = pluginDescriptor.getMojo( goal );
+ if ( forkedMojoDescriptor == null )
+ {
+ throw new MojoNotFoundException( goal, pluginDescriptor );
+ }
+ }
+ else
+ {
+ forkedMojoDescriptor = getMojoDescriptor( goal, session, project );
+ }
+
+ MojoExecution forkedExecution =
+ new MojoExecution( forkedMojoDescriptor, mojoExecution.getExecutionId() );
+
+ Xpp3Dom forkedConfiguration = (Xpp3Dom) execution.getConfiguration();
- populateMojoExecutionConfiguration( project, forkedExecution, true );
+ forkedExecution.setConfiguration( forkedConfiguration );
- extractMojoConfiguration( forkedExecution );
+ populateMojoExecutionConfiguration( project, forkedExecution, true );
- calculateForkedExecutions( forkedExecution, session, project, alreadyForkedExecutions );
+ forkedExecutions.add( forkedExecution );
+ }
+ }
- mojoExecution.addForkedExecution( forkedExecution );
+ Xpp3Dom phaseConfiguration = (Xpp3Dom) phase.getConfiguration();
+
+ if ( phaseConfiguration != null )
+ {
+ for ( MojoExecution forkedExecution : forkedExecutions )
+ {
+ Xpp3Dom forkedConfiguration = forkedExecution.getConfiguration();
+
+ forkedConfiguration = Xpp3Dom.mergeXpp3Dom( phaseConfiguration, forkedConfiguration );
+
+ forkedExecution.setConfiguration( forkedConfiguration );
+ }
+ }
+ }
}
}
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=808219&r1=808218&r2=808219&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 Aug 26 23:18:59 2009
@@ -19,8 +19,9 @@
* under the License.
*/
-import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
@@ -64,7 +65,11 @@
*/
private String lifecyclePhase;
- private List<MojoExecution> forkedExecutions = new ArrayList<MojoExecution>();
+ /**
+ * The executions to fork before this execution, indexed by the groupId:artifactId:version of the project on which
+ * the forked execution are to be run and in reactor build order.
+ */
+ private Map<String, List<MojoExecution>> forkedExecutions = new LinkedHashMap<String, List<MojoExecution>>();
public MojoExecution( Plugin plugin, String goal, String executionId )
{
@@ -219,19 +224,14 @@
this.mojoDescriptor = mojoDescriptor;
}
- public List<MojoExecution> getForkedExecutions()
+ public Map<String, List<MojoExecution>> getForkedExecutions()
{
return forkedExecutions;
}
- public void addForkedExecution( MojoExecution forkedExecution )
+ public void addForkedExecutions( String projectKey, List<MojoExecution> forkedExecutions )
{
- if ( forkedExecution == null )
- {
- throw new IllegalArgumentException( "forked execution missing" );
- }
-
- forkedExecutions.add( forkedExecution );
+ this.forkedExecutions.put( projectKey, forkedExecutions );
}
}
Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/ExecutionEventLogger.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/ExecutionEventLogger.java?rev=808219&r1=808218&r2=808219&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/ExecutionEventLogger.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/ExecutionEventLogger.java Wed Aug 26 23:18:59 2009
@@ -270,6 +270,7 @@
{
buffer.append( " (" ).append( me.getExecutionId() ).append( ')' );
}
+ buffer.append( " @ " ).append( event.getProject().getArtifactId() );
buffer.append( " ---" );
logger.info( "" );