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() )

Reply via email to