You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2022/06/04 09:13:07 UTC

[maven] branch MNG-7468-3.9 created (now d23d72902)

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

sjaranowski pushed a change to branch MNG-7468-3.9
in repository https://gitbox.apache.org/repos/asf/maven.git


      at d23d72902 [MNG-7468] Check unsupported plugins parameters in configuration - 3.9

This branch includes the following new commits:

     new d23d72902 [MNG-7468] Check unsupported plugins parameters in configuration - 3.9

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven] 01/01: [MNG-7468] Check unsupported plugins parameters in configuration - 3.9

Posted by sj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d23d72902d6e665fc9b0f5c3ccc01b813400977b
Author: Slawomir Jaranowski <s....@gmail.com>
AuthorDate: Sat May 21 16:11:35 2022 +0200

    [MNG-7468] Check unsupported plugins parameters in configuration - 3.9
    
    (cherry picked from commit 54f9d91ebb05ff8a051272c4e91dca4ee4984d80)
---
 .../internal/DefaultMojoExecutionConfigurator.java | 95 ++++++++++++++++++++++
 1 file changed, 95 insertions(+)

diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutionConfigurator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutionConfigurator.java
index 8c809de82..94fbf92cb 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutionConfigurator.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutionConfigurator.java
@@ -20,15 +20,29 @@ package org.apache.maven.lifecycle.internal;
  */
 
 import java.util.Collection;
+import java.util.Collections;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.maven.lifecycle.MojoExecutionConfigurator;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.PluginExecution;
 import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.Parameter;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.component.annotations.Component;
+import org.apache.maven.shared.utils.logging.MessageBuilder;
+import org.apache.maven.shared.utils.logging.MessageUtils;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static java.util.Arrays.stream;
 
 /**
  * @since 3.3.1, MNG-5753
@@ -37,6 +51,7 @@ import org.codehaus.plexus.util.xml.Xpp3Dom;
 public class DefaultMojoExecutionConfigurator
     implements MojoExecutionConfigurator
 {
+    private final Logger logger = LoggerFactory.getLogger( getClass() );
 
     @Override
     public void configure( MavenProject project, MojoExecution mojoExecution, boolean allowPluginLevelConfig )
@@ -73,6 +88,8 @@ public class DefaultMojoExecutionConfigurator
             mojoConfiguration = Xpp3Dom.mergeXpp3Dom( mojoExecution.getConfiguration(), mojoConfiguration );
 
             mojoExecution.setConfiguration( mojoConfiguration );
+
+            checkUnknownMojoConfigurationParameters( mojoExecution );
         }
     }
 
@@ -105,4 +122,82 @@ public class DefaultMojoExecutionConfigurator
         return null;
     }
 
+    private void checkUnknownMojoConfigurationParameters( MojoExecution mojoExecution )
+    {
+        if ( mojoExecution.getMojoDescriptor() == null
+            || mojoExecution.getConfiguration() == null || mojoExecution.getConfiguration().getChildCount() == 0 )
+        {
+            return;
+        }
+
+        MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+        // in first step get parameter names of current goal
+        Set<String> parametersNamesGoal = Optional.ofNullable( mojoDescriptor.getParameters() )
+            .orElseGet( Collections::emptyList ).stream()
+            .flatMap( this::getParameterNames )
+            .collect( Collectors.toSet() );
+
+        Set<String> unknownParameters = getUnknownParameters( mojoExecution, parametersNamesGoal );
+
+        if ( unknownParameters.isEmpty() )
+        {
+            return;
+        }
+
+        // second step get parameter names of all plugin goals
+        Set<String> parametersNamesAll = Optional.ofNullable( mojoDescriptor.getPluginDescriptor() )
+            .map( PluginDescriptor::getMojos )
+            .orElseGet( Collections::emptyList ).stream()
+            .filter( m -> m.getParameters() != null )
+            .flatMap( m -> m.getParameters().stream() )
+            .flatMap( this::getParameterNames )
+            .collect( Collectors.toSet() );
+
+        unknownParameters = getUnknownParameters( mojoExecution, parametersNamesAll );
+
+        unknownParameters.forEach(
+            name ->
+            {
+                MessageBuilder messageBuilder = MessageUtils.buffer()
+                    .warning( "Parameter '" )
+                    .warning( name )
+                    .warning( "' is unknown for plugin '" )
+                    .warning( mojoExecution.getArtifactId() ).warning( ":" )
+                    .warning( mojoExecution.getVersion() ).warning( ":" )
+                    .warning( mojoExecution.getGoal() );
+
+                if ( mojoExecution.getExecutionId() != null )
+                {
+                    messageBuilder.warning( " (" );
+                    messageBuilder.warning( mojoExecution.getExecutionId() );
+                    messageBuilder.warning( ")" );
+                }
+
+                messageBuilder.warning( "'" );
+
+                logger.warn( messageBuilder.toString() );
+            } );
+    }
+
+    private Stream<String> getParameterNames( Parameter parameter )
+    {
+        if ( parameter.getAlias() != null )
+        {
+            return Stream.of( parameter.getName(), parameter.getAlias() );
+        }
+        else
+        {
+            return Stream.of( parameter.getName() );
+        }
+    }
+
+    private Set<String> getUnknownParameters( MojoExecution mojoExecution, Set<String> parameters )
+    {
+        return stream( mojoExecution.getConfiguration().getChildren() )
+            .map( Xpp3Dom::getName )
+            .filter( name -> !parameters.contains( name ) )
+            .collect( Collectors.toSet() );
+    }
+
 }