Repository: maven
Updated Branches:
  refs/heads/master ab7b5ab47 -> e84405162


[MNG-5359] Declared execution in PluginMgmt gets bound to lifecycle (regression)

o Updated to add lifecycle plugins only if a phase of the
  lifecycle is requested to be executed.


Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/e8440516
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/e8440516
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/e8440516

Branch: refs/heads/master
Commit: e84405162b8a228aaced264f48ec6a3e8ed261e8
Parents: ab7b5ab
Author: Christian Schulte <schu...@apache.org>
Authored: Sun Dec 20 19:32:57 2015 +0100
Committer: Christian Schulte <schu...@apache.org>
Committed: Sun Dec 20 19:32:57 2015 +0100

----------------------------------------------------------------------
 .../project/DefaultMavenProjectBuilder.java     |  1 +
 .../project/EmptyLifecyclePluginAnalyzer.java   |  6 ++
 .../execution/DefaultMavenExecutionRequest.java |  1 +
 .../maven/lifecycle/DefaultLifecycles.java      |  4 +-
 .../lifecycle/LifeCyclePluginAnalyzer.java      | 15 +++++
 .../maven/lifecycle/LifecycleExecutor.java      | 15 ++---
 .../DefaultLifecyclePluginAnalyzer.java         | 63 ++++++++++++++++++++
 .../DefaultLifecycleBindingsInjector.java       | 42 +++++++++----
 .../maven/project/DefaultProjectBuilder.java    |  1 +
 .../project/DefaultProjectBuildingRequest.java  | 17 ++++++
 .../maven/project/ProjectBuildingRequest.java   | 20 +++++++
 .../lifecycle/EmptyLifecyclePluginAnalyzer.java |  7 ++-
 .../stub/LifeCyclePluginAnalyzerStub.java       |  6 ++
 .../building/DefaultModelBuildingRequest.java   | 17 ++++++
 .../building/FilterModelBuildingRequest.java    | 15 ++++-
 .../model/building/ModelBuildingRequest.java    | 19 ++++++
 .../model/plugin/DefaultReportingConverter.java |  6 ++
 17 files changed, 228 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
----------------------------------------------------------------------
diff --git 
a/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 
b/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
index 7bc5a5c..6834a17 100644
--- 
a/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
+++ 
b/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
@@ -101,6 +101,7 @@ public class DefaultMavenProjectBuilder
                 {
                     request.setActiveProfileIds( req.getActiveProfiles() );
                     request.setInactiveProfileIds( req.getInactiveProfiles() );
+                    request.setGoals( request.getGoals() );
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecyclePluginAnalyzer.java
----------------------------------------------------------------------
diff --git 
a/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecyclePluginAnalyzer.java
 
b/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecyclePluginAnalyzer.java
index 672e07b..925e346 100644
--- 
a/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecyclePluginAnalyzer.java
+++ 
b/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecyclePluginAnalyzer.java
@@ -57,6 +57,12 @@ public class EmptyLifecyclePluginAnalyzer
         return plugins;
     }
 
+    @Override
+    public Set<Plugin> getPlugins( final String packaging, final Set<String> 
phases )
+    {
+        return Collections.emptySet();
+    }
+
     private Plugin newPlugin( String artifactId, String... goals )
     {
         Plugin plugin = new Plugin();

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
 
b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
index 71a6894..218b4ec 100644
--- 
a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
+++ 
b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
@@ -1105,6 +1105,7 @@ public class DefaultMavenExecutionRequest
             projectBuildingRequest.setProfiles( getProfiles() );
             projectBuildingRequest.setProcessPlugins( true );
             projectBuildingRequest.setBuildStartTime( getStartTime() );
+            projectBuildingRequest.setGoals( getGoals() );
         }
 
         return projectBuildingRequest;

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java 
b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java
index 48cd0c5..788c2fe 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java
@@ -66,9 +66,9 @@ public class DefaultLifecycles
         this.lifecycles = lifecycles;
     }
 
-    public Lifecycle get( String key )
+    public Lifecycle get( String phase )
     {
-        return getPhaseToLifecycleMap().get( key );
+        return getPhaseToLifecycleMap().get( phase );
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-core/src/main/java/org/apache/maven/lifecycle/LifeCyclePluginAnalyzer.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/main/java/org/apache/maven/lifecycle/LifeCyclePluginAnalyzer.java
 
b/maven-core/src/main/java/org/apache/maven/lifecycle/LifeCyclePluginAnalyzer.java
index ed07c1d..770e013 100644
--- 
a/maven-core/src/main/java/org/apache/maven/lifecycle/LifeCyclePluginAnalyzer.java
+++ 
b/maven-core/src/main/java/org/apache/maven/lifecycle/LifeCyclePluginAnalyzer.java
@@ -28,5 +28,20 @@ import org.apache.maven.model.Plugin;
  */
 public interface LifeCyclePluginAnalyzer
 {
+
+    @Deprecated
     Set<Plugin> getPluginsBoundByDefaultToAllLifecycles( String packaging );
+
+    /**
+     * Gets the lifecycle {@code Plugin}s for a given packaging and set of 
phases.
+     *
+     * @param packaging The packaging to get plugins for.
+     * @param phases The phases to get plugins for.
+     *
+     * @return All lifecycle {@code Plugin}s for the given {@code packaging} 
and {@code phases}.
+     *
+     * @since 3.4
+     */
+    Set<Plugin> getPlugins( String packaging, Set<String> phases );
+
 }

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java 
b/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java
index 04c602c..15c9c54 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java
@@ -47,20 +47,13 @@ public interface LifecycleExecutor
     @Deprecated
     String ROLE = LifecycleExecutor.class.getName();
 
-    // For a given project packaging find all the plugins that are bound to 
any registered
-    // lifecycles. The project builder needs to now what default plugin 
information needs to be
-    // merged into POM being built. Once the POM builder has this plugin 
information, versions can be assigned
-    // by the POM builder because they will have to be defined in plugin 
management. Once this is setComplete then it
-    // can be passed back so that the default configuration information can be 
populated.
-    //
-    // We need to know the specific version so that we can lookup the right 
version of the plugin descriptor
-    // which tells us what the default configuration is.
-    //
-
     /**
      * @return The plugins bound to the lifecycles of the specified packaging 
or {@code null} if the packaging is
-     *         unknown.
+     * unknown.
+     *
+     * @deprecated Please use {@link LifeCyclePluginAnalyzer}.
      */
+    @Deprecated
     Set<Plugin> getPluginsBoundByDefaultToAllLifecycles( String packaging );
 
     MavenExecutionPlan calculateExecutionPlan( MavenSession session, String... 
tasks )

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/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 a72ce8e..555498d 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
@@ -33,6 +33,7 @@ import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashSet;
@@ -128,6 +129,68 @@ public class DefaultLifecyclePluginAnalyzer
         return plugins.keySet();
     }
 
+    @Override
+    public Set<Plugin> getPlugins( final String packaging, final Set<String> 
phases )
+    {
+        if ( logger.isDebugEnabled() )
+        {
+            logger.debug( "Looking up lifecyle mappings for packaging " + 
packaging + " from "
+                              + Thread.currentThread().getContextClassLoader() 
);
+        }
+
+        final LifecycleMapping lifecycleMappingForPackaging = 
this.lifecycleMappings.get( packaging );
+        final Map<Plugin, Plugin> plugins = new LinkedHashMap<>();
+
+        for ( final Lifecycle lifecycle : this.getOrderedLifecycles() )
+        {
+            org.apache.maven.lifecycle.mapping.Lifecycle 
lifecycleConfiguration =
+                lifecycleMappingForPackaging.getLifecycles().get( 
lifecycle.getId() );
+
+            Map<String, LifecyclePhase> phaseToGoalMapping = null;
+
+            if ( lifecycleConfiguration != null )
+            {
+                phaseToGoalMapping = 
lifecycleConfiguration.getLifecyclePhases();
+            }
+            else if ( lifecycle.getDefaultLifecyclePhases() != null )
+            {
+                phaseToGoalMapping = lifecycle.getDefaultLifecyclePhases();
+            }
+
+            if ( phaseToGoalMapping != null )
+            {
+                final Collection<String> lifecyclePhases = new ArrayList<>();
+
+                if ( lifecycleConfiguration != null && lifecycle.getPhases() 
!= null )
+                {
+                    lifecyclePhases.addAll( lifecycle.getPhases() );
+                }
+                else if ( lifecycle.getDefaultLifecyclePhases() != null )
+                {
+                    lifecyclePhases.addAll( 
lifecycle.getDefaultLifecyclePhases().keySet() );
+                }
+
+                lifecyclePhases.retainAll( phases );
+                if ( !lifecyclePhases.isEmpty() )
+                {
+                    for ( final Map.Entry<String, LifecyclePhase> 
goalsForLifecyclePhase
+                              : phaseToGoalMapping.entrySet() )
+                    {
+                        final String phase = goalsForLifecyclePhase.getKey();
+                        final LifecyclePhase goals = 
goalsForLifecyclePhase.getValue();
+
+                        if ( goals != null )
+                        {
+                            parseLifecyclePhaseDefinitions( plugins, phase, 
goals );
+                        }
+                    }
+                }
+            }
+        }
+
+        return plugins.keySet();
+    }
+
     private List<Lifecycle> getOrderedLifecycles()
     {
         // NOTE: The lifecycle order can affect implied execution ids so we 
better be deterministic.

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java
 
b/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java
index 1401e30..9422be6 100644
--- 
a/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java
+++ 
b/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java
@@ -22,10 +22,12 @@ package org.apache.maven.model.plugin;
 import java.util.ArrayList;
 import java.util.Collection;
 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 org.apache.maven.lifecycle.LifeCyclePluginAnalyzer;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Model;
@@ -35,9 +37,6 @@ import org.apache.maven.model.PluginExecution;
 import org.apache.maven.model.PluginManagement;
 import org.apache.maven.model.building.ModelBuildingRequest;
 import org.apache.maven.model.building.ModelProblemCollector;
-import org.apache.maven.model.building.ModelProblem.Severity;
-import org.apache.maven.model.building.ModelProblem.Version;
-import org.apache.maven.model.building.ModelProblemCollectorRequest;
 import org.apache.maven.model.merge.MavenModelMerger;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
@@ -55,21 +54,34 @@ public class DefaultLifecycleBindingsInjector
     private LifecycleBindingsMerger merger = new LifecycleBindingsMerger();
 
     @Requirement
-    private LifeCyclePluginAnalyzer lifecycle;
+    private LifeCyclePluginAnalyzer lifecyclePluginAnalyzer;
 
     public void injectLifecycleBindings( Model model, ModelBuildingRequest 
request, ModelProblemCollector problems )
     {
-        String packaging = model.getPackaging();
+        final Set<String> phases = new HashSet<>();
 
-        Collection<Plugin> defaultPlugins = 
lifecycle.getPluginsBoundByDefaultToAllLifecycles( packaging );
-
-        if ( defaultPlugins == null )
+        if ( request.getGoals() != null )
         {
-            problems.add( new ModelProblemCollectorRequest( Severity.ERROR, 
Version.BASE )
-                    .setMessage( "Unknown packaging: " + packaging )
-                    .setLocation( model.getLocation( "packaging" ) ) );
+            for ( final String goal : request.getGoals() )
+            {
+                if ( !this.isGoalSpecification( goal ) )
+                {
+                    phases.add( goal );
+                }
+            }
         }
-        else if ( !defaultPlugins.isEmpty() )
+
+        final String packaging = model.getPackaging();
+
+        // MNG-5359: request.setGoals() may not have been called since the 
goals got added for MNG-5359 in 3.4. In this
+        //           case fall back to the pre 3.4 behaviour. Usages of 
ProjectBuildingRequest and ModelBuildingRequest
+        //           without setting the goals should behave the same way as 
before.
+        final Collection<Plugin> defaultPlugins =
+            request.getGoals() == null
+                ? 
lifecyclePluginAnalyzer.getPluginsBoundByDefaultToAllLifecycles( packaging )
+                : lifecyclePluginAnalyzer.getPlugins( packaging, phases );
+
+        if ( !defaultPlugins.isEmpty() )
         {
             Model lifecycleModel = new Model();
             lifecycleModel.setBuild( new Build() );
@@ -79,6 +91,12 @@ public class DefaultLifecycleBindingsInjector
         }
     }
 
+    // Copied from 'DefaultLifecycleTaskSegmentCalculator'.
+    private boolean isGoalSpecification( String task )
+    {
+        return task.indexOf( ':' ) >= 0;
+    }
+
     protected static class LifecycleBindingsMerger
         extends MavenModelMerger
     {

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java 
b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index fb15c87..3b3fe74 100644
--- 
a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ 
b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -272,6 +272,7 @@ public class DefaultProjectBuilder
         request.setBuildStartTime( configuration.getBuildStartTime() );
         request.setModelResolver( resolver );
         request.setModelCache( new ReactorModelCache() );
+        request.setGoals( configuration.getGoals() );
 
         return request;
     }

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
 
b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
index 97eb276..ab5de1c 100644
--- 
a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
+++ 
b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
@@ -20,6 +20,7 @@ package org.apache.maven.project;
  */
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Properties;
@@ -67,6 +68,8 @@ public class DefaultProjectBuildingRequest
 
     private RepositoryMerging repositoryMerging = 
RepositoryMerging.POM_DOMINANT;
 
+    private List<String> goals;
+
     public DefaultProjectBuildingRequest()
     {
         processPlugins = true;
@@ -96,6 +99,7 @@ public class DefaultProjectBuildingRequest
         setProject( request.getProject() );
         setResolveDependencies( request.isResolveDependencies() );
         setValidationLevel( request.getValidationLevel() );
+        setGoals( request.getGoals() );
     }
 
     public MavenProject getProject()
@@ -339,6 +343,19 @@ public class DefaultProjectBuildingRequest
         return this;
     }
 
+    @Override
+    public List<String> getGoals()
+    {
+        return this.goals;
+    }
+
+    @Override
+    public DefaultProjectBuildingRequest setGoals( final List<String> value )
+    {
+        this.goals = value != null ? Collections.unmodifiableList( value ) : 
null;
+        return this;
+    }
+
     public RepositoryMerging getRepositoryMerging()
     {
         return repositoryMerging;

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java 
b/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java
index 17a53b1..c87c8d9 100644
--- 
a/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java
+++ 
b/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java
@@ -185,6 +185,26 @@ public interface ProjectBuildingRequest
     ProjectBuildingRequest setResolveVersionRanges( boolean value );
 
     /**
+     * Gets the goals the user requested to execute.
+     *
+     * @return An unmodifiable set of goals to execute or {@code null}.
+     *
+     * @since 3.4
+     */
+    List<String> getGoals();
+
+    /**
+     * Sets the goals the user requested to execute.
+     *
+     * @param value Set of goals the user requested to execute or {@code null}.
+     *
+     * @return This request, newver {@code null}.
+     *
+     * @since 3.4
+     */
+    ProjectBuildingRequest setGoals( List<String> value );
+
+    /**
      * The possible merge modes for combining remote repositories.
      */
     enum RepositoryMerging

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-core/src/test/java/org/apache/maven/lifecycle/EmptyLifecyclePluginAnalyzer.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/test/java/org/apache/maven/lifecycle/EmptyLifecyclePluginAnalyzer.java
 
b/maven-core/src/test/java/org/apache/maven/lifecycle/EmptyLifecyclePluginAnalyzer.java
index a812c26..b0df34d 100644
--- 
a/maven-core/src/test/java/org/apache/maven/lifecycle/EmptyLifecyclePluginAnalyzer.java
+++ 
b/maven-core/src/test/java/org/apache/maven/lifecycle/EmptyLifecyclePluginAnalyzer.java
@@ -56,6 +56,12 @@ public class EmptyLifecyclePluginAnalyzer
         return plugins;
     }
 
+    @Override
+    public Set<Plugin> getPlugins( final String packaging, final Set<String> 
phases )
+    {
+        return Collections.emptySet();
+    }
+
     private Plugin newPlugin( String artifactId, String... goals )
     {
         Plugin plugin = new Plugin();
@@ -73,5 +79,4 @@ public class EmptyLifecyclePluginAnalyzer
 
         return plugin;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifeCyclePluginAnalyzerStub.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifeCyclePluginAnalyzerStub.java
 
b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifeCyclePluginAnalyzerStub.java
index b067e24..8372179 100644
--- 
a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifeCyclePluginAnalyzerStub.java
+++ 
b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifeCyclePluginAnalyzerStub.java
@@ -53,6 +53,12 @@ public class LifeCyclePluginAnalyzerStub
         return plugins;
     }
 
+    @Override
+    public Set<Plugin> getPlugins( final String packaging, final Set<String> 
phases )
+    {
+        return Collections.emptySet();
+    }
+
     private Plugin newPlugin( String artifactId, String... goals )
     {
         Plugin plugin = new Plugin();

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
----------------------------------------------------------------------
diff --git 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
index a3505c9..f5e1c83 100644
--- 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
+++ 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
@@ -21,6 +21,7 @@ package org.apache.maven.model.building;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Properties;
@@ -73,6 +74,8 @@ public class DefaultModelBuildingRequest
 
     private WorkspaceModelResolver workspaceResolver;
 
+    private List<String> goals;
+
     /**
      * Creates an empty request.
      */
@@ -101,6 +104,7 @@ public class DefaultModelBuildingRequest
         setModelResolver( request.getModelResolver() );
         setModelBuildingListener( request.getModelBuildingListener() );
         setModelCache( request.getModelCache() );
+        setGoals( request.getGoals() );
     }
 
     @Override
@@ -405,4 +409,17 @@ public class DefaultModelBuildingRequest
         return this;
     }
 
+    @Override
+    public List<String> getGoals()
+    {
+        return this.goals;
+    }
+
+    @Override
+    public ModelBuildingRequest setGoals( final List<String> value )
+    {
+        this.goals = value != null ? Collections.unmodifiableList( value ) : 
null;
+        return this;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java
----------------------------------------------------------------------
diff --git 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java
 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java
index c5c2cbf..480668c 100644
--- 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java
+++ 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java
@@ -282,4 +282,17 @@ class FilterModelBuildingRequest
         return this;
     }
 
-}
\ No newline at end of file
+    @Override
+    public List<String> getGoals()
+    {
+        return request.getGoals();
+    }
+
+    @Override
+    public ModelBuildingRequest setGoals( final List<String> value )
+    {
+        request.setGoals( value );
+        return this;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
----------------------------------------------------------------------
diff --git 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
index c10274d..e1cad14 100644
--- 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
+++ 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
@@ -335,4 +335,23 @@ public interface ModelBuildingRequest
 
     ModelBuildingRequest setWorkspaceModelResolver( WorkspaceModelResolver 
workspaceResolver );
 
+    /**
+     * Gets the goals the user requested to execute.
+     *
+     * @return An unmodifiable set of goals to execute or {@code null}.
+     *
+     * @since 3.4
+     */
+    List<String> getGoals();
+
+    /**
+     * Sets the goals the user requested to execute.
+     *
+     * @param value Set of goals the user requested to execute or {@code null}.
+     *
+     * @return This request, newver {@code null}.
+     *
+     * @since 3.4
+     */
+    ModelBuildingRequest setGoals( List<String> value );
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven/blob/e8440516/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java
----------------------------------------------------------------------
diff --git 
a/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java
 
b/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java
index d918d9e..4d2bef1 100644
--- 
a/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java
+++ 
b/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java
@@ -66,6 +66,12 @@ public class DefaultReportingConverter
         {
             sitePlugin = new Plugin();
             sitePlugin.setArtifactId( "maven-site-plugin" );
+
+            // MNG-5359: Since the site plugin is no longer added if not 
requested by the user, a version needs to be
+            //           provided here. This version should be kept in sync 
with the version declared for the 'site'
+            //           lifecycle. Prior to MNG-5359, findSitePlugin( build ) 
never returned 'null'.
+            sitePlugin.setVersion( "3.3" );
+
             PluginManagement pluginManagement = build.getPluginManagement();
             if ( pluginManagement == null )
             {

Reply via email to