Repository: maven Updated Branches: refs/heads/master 029af3a39 -> d5ba185c1
[MNG-5359] Declared execution in PluginMgmt gets bound to lifecycle (regression) o Updated to support 'LifecycleMappingDelegates' (MNG-5581). Project: http://git-wip-us.apache.org/repos/asf/maven/repo Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/d5ba185c Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/d5ba185c Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/d5ba185c Branch: refs/heads/master Commit: d5ba185c1ab926b53acb0947c8a13ad74eac55e6 Parents: 029af3a Author: Christian Schulte <[email protected]> Authored: Tue Dec 22 00:15:13 2015 +0100 Committer: Christian Schulte <[email protected]> Committed: Tue Dec 22 00:43:13 2015 +0100 ---------------------------------------------------------------------- .../lifecycle/LifecycleMappingDelegate.java | 11 +++++ .../DefaultLifecycleMappingDelegate.java | 12 +++++ .../DefaultLifecyclePluginAnalyzer.java | 48 +++++++++++++++++++- 3 files changed, 70 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/d5ba185c/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleMappingDelegate.java ---------------------------------------------------------------------- diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleMappingDelegate.java b/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleMappingDelegate.java index f070198..0b4465f 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleMappingDelegate.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleMappingDelegate.java @@ -21,6 +21,7 @@ package org.apache.maven.lifecycle; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.InvalidPluginDescriptorException; @@ -45,6 +46,16 @@ import org.apache.maven.project.MavenProject; */ public interface LifecycleMappingDelegate { + + /** + * Gets a set of lifecycle identifiers of lifecycles this delegate is requiring to operate. + * + * @return An unmodifiable set of lifecycle identifiers of lifecycles this delegate is requiring to operate. + * + * @since 3.4 + */ + Set<String> getRequiredLifecycles(); + Map<String, List<MojoExecution>> calculateLifecycleMappings( MavenSession session, MavenProject project, Lifecycle lifecycle, String lifecyclePhase ) throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException, http://git-wip-us.apache.org/repos/asf/maven/blob/d5ba185c/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java ---------------------------------------------------------------------- diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java index 8348530..46b9a9a 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java @@ -20,9 +20,12 @@ package org.apache.maven.lifecycle.internal; */ import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.TreeMap; import org.apache.maven.execution.MavenSession; @@ -51,6 +54,15 @@ public class DefaultLifecycleMappingDelegate @Requirement private BuildPluginManager pluginManager; + @Override + public Set<String> getRequiredLifecycles() + { + // The default delegate requires the default lifecycle to operate. + final Set<String> requiredLifecycles = new HashSet<>(); + requiredLifecycles.add( "default" ); + return Collections.unmodifiableSet( requiredLifecycles ); + } + public Map<String, List<MojoExecution>> calculateLifecycleMappings( MavenSession session, MavenProject project, Lifecycle lifecycle, String lifecyclePhase ) throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException, http://git-wip-us.apache.org/repos/asf/maven/blob/d5ba185c/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java ---------------------------------------------------------------------- diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java index 340af62..585eb6e 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java @@ -20,6 +20,7 @@ package org.apache.maven.lifecycle.internal; */ import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -32,6 +33,7 @@ import java.util.Set; import org.apache.maven.lifecycle.DefaultLifecycles; import org.apache.maven.lifecycle.LifeCyclePluginAnalyzer; import org.apache.maven.lifecycle.Lifecycle; +import org.apache.maven.lifecycle.LifecycleMappingDelegate; import org.apache.maven.lifecycle.LifecycleMappingNotFoundException; import org.apache.maven.lifecycle.mapping.LifecycleMapping; import org.apache.maven.lifecycle.mapping.LifecycleMojo; @@ -63,6 +65,12 @@ public class DefaultLifecyclePluginAnalyzer @Requirement private DefaultLifecycles defaultLifeCycles; + @Requirement( hint = DefaultLifecycleMappingDelegate.HINT ) + private LifecycleMappingDelegate defaultLifecycleMappingDelegate; + + @Requirement + private Map<String, LifecycleMappingDelegate> lifecycleMappingDelegates; + @Requirement private Logger logger; @@ -149,6 +157,23 @@ public class DefaultLifecyclePluginAnalyzer } final Map<Plugin, Plugin> plugins = new LinkedHashMap<>(); + final Set<String> requiredLifecycles = new HashSet<>(); + + for ( final Lifecycle lifecycle : this.defaultLifeCycles.getLifeCycles() ) + { + // Keep in sync with + // DefaultLifecycleExecutionPlanCalculator#calculateLifecycleMappings( MavenSession session, + // MavenProject project, + // String lifecyclePhase ) + final LifecycleMappingDelegate lifecycleMappingDelegate = + Arrays.binarySearch( DefaultLifecycles.STANDARD_LIFECYCLES, lifecycle.getId() ) >= 0 + ? defaultLifecycleMappingDelegate + : lifecycleMappingDelegates.containsKey( lifecycle.getId() ) + ? lifecycleMappingDelegates.get( lifecycle.getId() ) + : defaultLifecycleMappingDelegate; + + requiredLifecycles.addAll( lifecycleMappingDelegate.getRequiredLifecycles() ); + } for ( final Lifecycle lifecycle : this.getOrderedLifecycles() ) { @@ -180,7 +205,28 @@ public class DefaultLifecyclePluginAnalyzer } lifecyclePhases.retainAll( phases ); - if ( !lifecyclePhases.isEmpty() ) + + if ( this.logger.isDebugEnabled() ) + { + if ( requiredLifecycles.contains( lifecycle.getId() ) ) + { + this.logger.debug( String.format( + "Injecting build plugins of lifecyle '%s' required by a lifecycle mapping delegate.", + lifecycle.getId() ) ); + + } + else if ( !lifecyclePhases.isEmpty() ) + { + this.logger.debug( String.format( + "Injecting build plugins of lifecyle '%s' required by a lifecycle phase.", + lifecycle.getId() ) ); + + } + } + + // Adds the plugins from the lifecycle if required by a 'LifecycleMappingDelegate' or by a phase getting + // executed. + if ( requiredLifecycles.contains( lifecycle.getId() ) || !lifecyclePhases.isEmpty() ) { for ( final Map.Entry<String, LifecyclePhase> goalsForLifecyclePhase : phaseToGoalMapping.entrySet() )
