From 6da9bf5c0a7ed8fec172b7b660e8545fe9178873 Mon Sep 17 00:00:00 2001 From: Benjamin Bentmann Date: Thu, 27 Aug 2009 18:00:56 +0000 Subject: [PATCH] [MNG-4327] [regression] Forking mojos that are bound to a lifecycle phase that gets forked execute multiple times git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@808556 13f79535-47bb-0310-9956-ffa450edef68 --- .../lifecycle/DefaultLifecycleExecutor.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java index 37878c5961..54e64079c4 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java @@ -984,6 +984,8 @@ public class DefaultLifecycleExecutor mojoExecution.addForkedExecutions( getKey( forkedProject ), forkedExecutions ); } + + alreadyForkedExecutions.remove( mojoDescriptor ); } private List calculateForkedGoal( MojoExecution mojoExecution, MavenSession session, @@ -1005,6 +1007,11 @@ public class DefaultLifecycleExecutor throw new MojoNotFoundException( forkedGoal, pluginDescriptor ); } + if ( alreadyForkedExecutions.contains( forkedMojoDescriptor ) ) + { + return Collections.emptyList(); + } + MojoExecution forkedExecution = new MojoExecution( forkedMojoDescriptor, forkedGoal ); populateMojoExecutionConfiguration( project, forkedExecution, true ); @@ -1052,13 +1059,18 @@ public class DefaultLifecycleExecutor for ( List forkedExecutions : lifecycleMappings.values() ) { - for ( MojoExecution forkedExecution : forkedExecutions ) + for ( Iterator it = forkedExecutions.iterator(); it.hasNext(); ) { - extractMojoConfiguration( forkedExecution ); + MojoExecution forkedExecution = it.next(); - calculateForkedExecutions( forkedExecution, session, project, alreadyForkedExecutions ); + if ( !alreadyForkedExecutions.contains( forkedExecution.getMojoDescriptor() ) ) + { + extractMojoConfiguration( forkedExecution ); - mojoExecutions.add( forkedExecution ); + calculateForkedExecutions( forkedExecution, session, project, alreadyForkedExecutions ); + + mojoExecutions.add( forkedExecution ); + } } }