diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java index 9777416c5e..bc113350d7 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java @@ -483,11 +483,9 @@ public void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException, LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException { - calculateForkedExecutions( mojoExecution, session, session.getCurrentProject(), new HashSet() ); - + calculateForkedExecutions( mojoExecution, session, session.getCurrentProject(), new HashSet() ); } - private void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession session, MavenProject project, Collection alreadyForkedExecutions ) throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException, @@ -511,6 +509,11 @@ private void calculateForkedExecutions( MojoExecution mojoExecution, MavenSessio for ( MavenProject forkedProject : forkedProjects ) { + if ( forkedProject != project ) + { + lifecyclePluginResolver.resolveMissingPluginVersions( forkedProject, session ); + } + List forkedExecutions; if ( StringUtils.isNotEmpty( mojoDescriptor.getExecutePhase() ) ) diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java index d9984f2a3a..63ebcb7bb2 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java @@ -60,7 +60,7 @@ public LifecyclePluginResolver() public void resolveMissingPluginVersions( MavenProject project, MavenSession session ) throws PluginVersionResolutionException { - Map versions = new HashMap(); + Map versions = new HashMap( 64 ); for ( Plugin plugin : project.getBuildPlugins() ) { diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java index 33ad2d214c..cdc9e7d829 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java @@ -42,6 +42,7 @@ import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; import org.codehaus.plexus.configuration.PlexusConfiguration; +import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.util.xml.Xpp3Dom; import java.util.ArrayList; @@ -63,6 +64,10 @@ @Component( role = MojoDescriptorCreator.class ) public class MojoDescriptorCreator { + + @Requirement + private Logger logger; + @Requirement private PluginVersionResolver pluginVersionResolver; @@ -72,17 +77,22 @@ public class MojoDescriptorCreator @Requirement private PluginPrefixResolver pluginPrefixResolver; + @Requirement + private LifecyclePluginResolver lifecyclePluginResolver; + @SuppressWarnings( { "UnusedDeclaration" } ) public MojoDescriptorCreator() { } public MojoDescriptorCreator( PluginVersionResolver pluginVersionResolver, BuildPluginManager pluginManager, - PluginPrefixResolver pluginPrefixResolver ) + PluginPrefixResolver pluginPrefixResolver, + LifecyclePluginResolver lifecyclePluginResolver ) { this.pluginVersionResolver = pluginVersionResolver; this.pluginManager = pluginManager; this.pluginPrefixResolver = pluginPrefixResolver; + this.lifecyclePluginResolver = lifecyclePluginResolver; } private Plugin findPlugin( String groupId, String artifactId, Collection plugins ) @@ -221,6 +231,19 @@ public Plugin findPluginForPrefix( String prefix, MavenSession session ) { // [prefix]:[goal] + if ( session.getCurrentProject() != null ) + { + try + { + lifecyclePluginResolver.resolveMissingPluginVersions( session.getCurrentProject(), session ); + } + catch ( PluginVersionResolutionException e ) + { + // not critical here + logger.debug( e.getMessage(), e ); + } + } + PluginPrefixRequest prefixRequest = new DefaultPluginPrefixRequest( prefix, session ); PluginPrefixResult prefixResult = pluginPrefixResolver.resolve( prefixRequest ); diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java index 753d495093..0e2ca5a917 100644 --- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java +++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java @@ -73,6 +73,7 @@ public static LifecycleExecutionPlanCalculator createExecutionPlaceCalculator( public static MojoDescriptorCreator createMojoDescriptorCreator() { return new MojoDescriptorCreator( new PluginVersionResolverStub(), new BuildPluginManagerStub(), - new PluginPrefixResolverStub() ); + new PluginPrefixResolverStub(), + new LifecyclePluginResolver( new PluginVersionResolverStub() ) ); } }