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>