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 1004cf1f4dfa40358365121bd723c9afbb9d386a
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 +++++++++++++++++++---
 1 file changed, 31 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() );

Reply via email to