You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2021/07/21 18:54:00 UTC

[maven-enforcer] 02/03: [MENFORCER-388] Extends RequirePluginVersions with banMavenDefaults

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

rfscholte pushed a commit to branch MENFORCER-388
in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git

commit 1bba4c7cf7710608a0bfd3a26a740b628e20f8fa
Author: rfscholte <rf...@apache.org>
AuthorDate: Thu Jul 15 12:57:28 2021 +0200

    [MENFORCER-388] Extends RequirePluginVersions with banMavenDefaults
---
 .../plugins/enforcer/RequirePluginVersions.java    | 33 +++++++++----
 .../plugins/enforcer/utils/PluginWrapper.java      | 25 ++++++++--
 .../maven/plugins/enforcer/EnforcerTestUtils.java  |  6 +++
 .../enforcer/TestRequirePluginVersions.java        |  4 +-
 .../invoker.properties                             | 18 +++++++
 .../require-plugin-versions_failure/pom.xml        | 57 ++++++++++++++++++++++
 6 files changed, 129 insertions(+), 14 deletions(-)

diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java
index db0c152..6b49219 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java
@@ -110,6 +110,11 @@ public class RequirePluginVersions
      * @see {@link #isBanTimestamps()}
      */
     private boolean banTimestamps = true;
+    
+    /**
+     * @since 3.0.0
+     */
+    private boolean banMavenDefaults = true;
 
     /**
      * The comma separated list of phases that should be used to find lifecycle plugin bindings. The default value is
@@ -281,13 +286,22 @@ public class RequirePluginVersions
 
                 Plugin currentPlugin = findCurrentPlugin( plugin, project );
 
-                if ( currentPlugin != null )
+                if ( currentPlugin == null )
                 {
-                    newMsg.append( currentPlugin.getVersion() );
+                    newMsg.append( "unknown" );
                 }
                 else
                 {
-                    newMsg.append( "unknown" );
+                    newMsg.append( currentPlugin.getVersion() );
+                    
+                    if ( PluginWrapper.isVersionFromDefaultLifecycleBindings( currentPlugin ) ) 
+                    {
+                        newMsg.append( " via default lifecycle bindings" );
+                    }
+                    else if ( PluginWrapper.isVersionFromSuperpom( currentPlugin ) ) 
+                    {
+                        newMsg.append( " via super POM" );
+                    }
                 }
             }
             catch ( Exception e )
@@ -966,7 +980,7 @@ public class RequirePluginVersions
         try
         {
             List<Plugin> modelPlugins = profile.getBuild().getPluginManagement().getPlugins();
-            plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ) ) );
+            plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ), banMavenDefaults ) );
         }
         catch ( NullPointerException e )
         {
@@ -980,7 +994,7 @@ public class RequirePluginVersions
         {
             List<ReportPlugin> modelReportPlugins = profile.getReporting().getPlugins();
             // add the reporting plugins
-            plugins.addAll( PluginWrapper.addAll( utils.resolveReportPlugins( modelReportPlugins ) ) );
+            plugins.addAll( PluginWrapper.addAll( utils.resolveReportPlugins( modelReportPlugins ), banMavenDefaults ) );
         }
         catch ( NullPointerException e )
         {
@@ -993,7 +1007,7 @@ public class RequirePluginVersions
         try
         {
             List<Plugin> modelPlugins = profile.getBuild().getPlugins();
-            plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ) ) );
+            plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ), banMavenDefaults ) );
         }
         catch ( NullPointerException e )
         {
@@ -1006,7 +1020,7 @@ public class RequirePluginVersions
         try
         {
             List<Plugin> modelPlugins = model.getBuild().getPlugins();
-            plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ) ) );
+            plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ), banMavenDefaults ) );
         }
         catch ( NullPointerException e )
         {
@@ -1019,7 +1033,7 @@ public class RequirePluginVersions
         try
         {
             List<Plugin> modelPlugins = model.getBuild().getPluginManagement().getPlugins();
-            plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ) ) );
+            plugins.addAll( PluginWrapper.addAll( utils.resolvePlugins( modelPlugins ), banMavenDefaults ) );
         }
         catch ( NullPointerException e )
         {
@@ -1033,7 +1047,8 @@ public class RequirePluginVersions
         {
             List<ReportPlugin> modelReportPlugins = model.getReporting().getPlugins();
             // add the reporting plugins
-            plugins.addAll( PluginWrapper.addAll( utils.resolveReportPlugins( modelReportPlugins ) ) );
+            plugins.addAll( PluginWrapper.addAll( utils.resolveReportPlugins( modelReportPlugins ),
+                                                  banMavenDefaults ) );
         }
         catch ( NullPointerException e )
         {
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/PluginWrapper.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/PluginWrapper.java
index 617c5f5..25e402a 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/PluginWrapper.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/PluginWrapper.java
@@ -40,15 +40,20 @@ public class PluginWrapper
 
     private final InputLocationTracker locationTracker;
 
-    public static List<PluginWrapper> addAll( List<?> plugins )
+    public static List<PluginWrapper> addAll( List<? extends InputLocationTracker> plugins, boolean banMavenDefaults )
     {
         List<PluginWrapper> results = null;
 
         if ( !plugins.isEmpty() )
         {
             results = new ArrayList<>( plugins.size() );
-            for ( Object o : plugins )
+            for ( InputLocationTracker o : plugins )
             {
+                if ( banMavenDefaults && ( isVersionFromDefaultLifecycleBindings( o ) || isVersionFromSuperpom( o ) ) )
+                {
+                    continue;
+                }
+                
                 if ( o instanceof Plugin )
                 {
                     results.add( new PluginWrapper( (Plugin) o ) );
@@ -60,11 +65,25 @@ public class PluginWrapper
                         results.add( new PluginWrapper( (ReportPlugin) o ) );
                     }
                 }
-
             }
         }
         return results;
     }
+    
+    public static boolean isVersionFromDefaultLifecycleBindings( InputLocationTracker o )
+    {
+        String modelId = o.getLocation( "version" ).getSource().getModelId();
+
+        return modelId.startsWith( "org.apache.maven:maven-core:" )
+            && modelId.endsWith( ":default-lifecycle-bindings" );
+    }
+
+    public static boolean isVersionFromSuperpom( InputLocationTracker o )
+    {
+        String modelId = o.getLocation( "version" ).getSource().getModelId();
+
+        return modelId.startsWith( "org.apache.maven:maven-model-builder:" ) && modelId.endsWith( ":super-pom" );
+    }
 
     private PluginWrapper( Plugin plugin )
     {
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java
index 006a729..792c82d 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java
@@ -34,6 +34,8 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
 import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.execution.MavenExecutionResult;
 import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.InputLocation;
+import org.apache.maven.model.InputSource;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.PluginParameterExpressionEvaluator;
@@ -189,10 +191,14 @@ public final class EnforcerTestUtils
      */
     public static Plugin newPlugin( String groupId, String artifactId, String version )
     {
+        InputSource inputSource = new InputSource();
+        inputSource.setModelId( "unit" );
+        
         Plugin plugin = new Plugin();
         plugin.setArtifactId( artifactId );
         plugin.setGroupId( groupId );
         plugin.setVersion( version );
+        plugin.setLocation( "version", new InputLocation( 0, 0, inputSource ) );
         return plugin;
     }
 }
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java
index c2947ad..8f85c5f 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java
@@ -80,7 +80,7 @@ public class TestRequirePluginVersions
         plugins.add( EnforcerTestUtils.newPlugin( "group", "g-artifact", "1.0-12345678.123456-1" ) );
 
 
-        List<PluginWrapper> pluginWrappers = PluginWrapper.addAll( plugins );
+        List<PluginWrapper> pluginWrappers = PluginWrapper.addAll( plugins, false );
 
         RequirePluginVersions rule = new RequirePluginVersions();
         rule.setBanLatest( false );
@@ -145,7 +145,7 @@ public class TestRequirePluginVersions
         plugins.add( EnforcerTestUtils.newPlugin( "group", "e-artifact", "${}" ) );
         plugins.add( EnforcerTestUtils.newPlugin( "group", "f-artifact", "${   }" ) );
 
-        List<PluginWrapper> pluginWrappers = PluginWrapper.addAll( plugins );
+        List<PluginWrapper> pluginWrappers = PluginWrapper.addAll( plugins, false );
 
         RequirePluginVersions rule = new RequirePluginVersions();
         rule.setBanLatest( false );
diff --git a/maven-enforcer-plugin/src/it/projects/require-plugin-versions_failure/invoker.properties b/maven-enforcer-plugin/src/it/projects/require-plugin-versions_failure/invoker.properties
new file mode 100644
index 0000000..c98ac4c
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-plugin-versions_failure/invoker.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+invoker.buildResult=failure
\ No newline at end of file
diff --git a/maven-enforcer-plugin/src/it/projects/require-plugin-versions_failure/pom.xml b/maven-enforcer-plugin/src/it/projects/require-plugin-versions_failure/pom.xml
new file mode 100644
index 0000000..72bef8b
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-plugin-versions_failure/pom.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.its.enforcer</groupId>
+  <artifactId>test</artifactId>
+  <version>1.0</version>
+  <packaging>pom</packaging>
+
+  <description>
+  </description>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>@project.version@</version>
+        <executions>
+          <execution>
+            <id>test</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requirePluginVersions>
+                  <banSnapshots>false</banSnapshots>
+                </requirePluginVersions>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>