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>