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