This is an automated email from the ASF dual-hosted git repository.

hboutemy pushed a commit to branch MNG-6562
in repository https://gitbox.apache.org/repos/asf/maven.git

commit d9bf929c74c7e72da22610d92bd53707a0588179
Author: Hervé Boutemy <hbout...@apache.org>
AuthorDate: Mon Jan 14 11:50:57 2019 +0100

    [MNG-6562] added WARNING on default bindings plugins unlocked versions
---
 .../plugin/DefaultLifecycleBindingsInjector.java   | 36 +++++++++++++++++---
 .../test/projects/project-builder/MNG-6723/pom.xml | 38 ++++++++++++++++++++++
 2 files changed, 69 insertions(+), 5 deletions(-)

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 6ec379a..8607909 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,6 +22,7 @@ package org.apache.maven.model.plugin;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -75,7 +76,7 @@ public class DefaultLifecycleBindingsInjector
             lifecycleModel.setBuild( new Build() );
             lifecycleModel.getBuild().getPlugins().addAll( defaultPlugins );
 
-            merger.merge( model, lifecycleModel );
+            merger.merge( model, lifecycleModel, problems );
         }
     }
 
@@ -87,18 +88,36 @@ public class DefaultLifecycleBindingsInjector
     {
 
         private static final String PLUGIN_MANAGEMENT = "plugin-management";
+        private static final String NO_VERSION_PLUGINS = "no-version-plugins";
 
-        public void merge( Model target, Model source )
+        public void merge( Model target, Model source, ModelProblemCollector 
problems )
         {
             if ( target.getBuild() == null )
             {
                 target.setBuild( new Build() );
             }
 
-            Map<Object, Object> context =
-                Collections.<Object, Object>singletonMap( PLUGIN_MANAGEMENT, 
target.getBuild().getPluginManagement() );
+            Map<Object, Object> context = new HashMap<Object, Object>();
+            context.put( PLUGIN_MANAGEMENT, 
target.getBuild().getPluginManagement() );
 
             mergePluginContainer_Plugins( target.getBuild(), 
source.getBuild(), false, context );
+
+            @SuppressWarnings( "unchecked" )
+            Collection<Plugin> defaultVersionPlugins = (Collection<Plugin>) 
context.get( NO_VERSION_PLUGINS );
+            if ( defaultVersionPlugins != null )
+            {
+                List<String> plugins = new ArrayList<>( 
defaultVersionPlugins.size() );
+                for ( Plugin p : defaultVersionPlugins )
+                {
+                    plugins.add( p.getArtifactId() );
+                }
+
+                problems.add( new ModelProblemCollectorRequest( 
Severity.WARNING, Version.BASE )
+                              .setMessage( "Version not locked for default 
bindings plugins " + plugins
+                                           + ", you should define versions in 
pluginManagement section of your "
+                                           + "pom.xml or parent" )
+                              .setLocation( target.getLocation( "packaging" ) 
) );
+            }
         }
 
         @SuppressWarnings( { "checkstyle:methodname" } )
@@ -144,7 +163,8 @@ public class DefaultLifecycleBindingsInjector
                         for ( Plugin managedPlugin : pluginMgmt.getPlugins() )
                         {
                             Object key = getPluginKey().apply( managedPlugin );
-                            Plugin addedPlugin = added.get( key );
+                            Plugin addedPlugin = // remove plugin only if 
managedPlugin defines version
+                                ( managedPlugin.getVersion() == null ) ? 
added.get( key ) : added.remove( key );
                             if ( addedPlugin != null )
                             {
                                 Plugin plugin = managedPlugin.clone();
@@ -153,6 +173,12 @@ public class DefaultLifecycleBindingsInjector
                             }
                         }
                     }
+
+                    if ( !added.isEmpty() )
+                    {
+                        // some plugins added with default version from 
bindings
+                        context.put( NO_VERSION_PLUGINS, added.values() );
+                    }
                 }
 
                 List<Plugin> result = new ArrayList<>( merged.values() );
diff --git a/maven-core/src/test/projects/project-builder/MNG-6723/pom.xml 
b/maven-core/src/test/projects/project-builder/MNG-6723/pom.xml
index e21f824..3aae158 100644
--- a/maven-core/src/test/projects/project-builder/MNG-6723/pom.xml
+++ b/maven-core/src/test/projects/project-builder/MNG-6723/pom.xml
@@ -8,4 +8,42 @@
   <modules>
     <module>child</module>
   </modules>
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>1.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>1.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>1.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>1.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>1.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>1.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>1.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>1.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
 </project>

Reply via email to