This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git
The following commit(s) were added to refs/heads/master by this push:
new 1b8ca8f [MENFORCER-388] Extends RequirePluginVersions with
banMavenDefaults
1b8ca8f is described below
commit 1b8ca8f82815ec721e09abbd2330ce315893f2ed
Author: rfscholte <[email protected]>
AuthorDate: Thu Jul 22 13:41:20 2021 +0200
[MENFORCER-388] Extends RequirePluginVersions with banMavenDefaults
---
.../plugins/enforcer/RequirePluginVersions.java | 47 ++++++++++++++++-----
.../plugins/enforcer/utils/PluginWrapper.java | 49 ++++++++++++++++++++--
.../maven/plugins/enforcer/EnforcerTestUtils.java | 6 +++
.../enforcer/TestRequirePluginVersions.java | 4 +-
.../src/it/mrm/repository/menforcer359-1.0.pom | 1 +
.../require-plugin-versions-ci/verify.groovy | 2 +-
.../invoker.properties | 18 ++++++++
.../pom.xml | 8 ++--
.../require-plugin-versions_inherit/pom.xml | 6 +++
9 files changed, 121 insertions(+), 20 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 e9e05ce..c098348 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
@@ -62,6 +62,7 @@ import
org.apache.maven.plugin.version.PluginVersionResolutionException;
import org.apache.maven.plugins.enforcer.utils.EnforcerRuleUtils;
import org.apache.maven.plugins.enforcer.utils.PluginWrapper;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.rtinfo.RuntimeInformation;
import org.apache.maven.settings.Settings;
import
org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
import
org.codehaus.plexus.component.repository.exception.ComponentLookupException;
@@ -112,6 +113,11 @@ public class RequirePluginVersions
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
* "clean,deploy,site".
*
@@ -176,6 +182,8 @@ public class RequirePluginVersions
/** The utils. */
private EnforcerRuleUtils utils;
+ private RuntimeInformation runtimeInformation;
+
@Override
public void execute( EnforcerRuleHelper helper )
throws EnforcerRuleException
@@ -190,6 +198,8 @@ public class RequirePluginVersions
project = (MavenProject) helper.evaluate( "${project}" );
+ runtimeInformation = helper.getComponent( RuntimeInformation.class
);
+
DefaultLifecycles defaultLifeCycles = helper.getComponent(
DefaultLifecycles.class );
lifecycles = defaultLifeCycles.getLifeCycles();
@@ -266,7 +276,8 @@ public class RequirePluginVersions
throws EnforcerRuleException
{
StringBuilder newMsg = new StringBuilder();
- newMsg.append( "Some plugins are missing valid versions:" );
+ newMsg.append( "Some plugins are missing valid versions or depend on
Maven "
+ + runtimeInformation.getMavenVersion() + " defaults:" );
handleBanMessages( newMsg );
newMsg.append( "\n" );
for ( Plugin plugin : failures )
@@ -281,13 +292,27 @@ 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 ).orElse( false ) )
+ {
+ newMsg.append( " via default lifecycle bindings" );
+ }
+ else
+ {
+ String msg = PluginWrapper.isVersionFromSuperpom(
currentPlugin )
+ .filter( b -> b )
+ .map( t -> " via super POM" )
+ // for Maven 3.6.0 or before (MNG-6593
/ MNG-6600)
+ .orElse( " via super POM or default
lifecycle bindings" );
+ newMsg.append( msg );
+ }
}
}
catch ( Exception e )
@@ -966,7 +991,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 +1005,8 @@ 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 +1019,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 +1032,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 +1045,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 +1059,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 b02befa..70d2f11 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
@@ -21,6 +21,7 @@ package org.apache.maven.plugins.enforcer.utils;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import org.apache.maven.model.InputLocation;
import org.apache.maven.model.InputLocationTracker;
@@ -41,15 +42,22 @@ 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 )
{
+ // null or true means it is most assumed a Maven default
+ if ( banMavenDefaults && (
isVersionFromDefaultLifecycleBindings( o ).orElse( true )
+ || isVersionFromSuperpom( o ).orElse( true ) ) )
+ {
+ continue;
+ }
+
if ( o instanceof Plugin )
{
results.add( new PluginWrapper( (Plugin) o ) );
@@ -61,11 +69,46 @@ public class PluginWrapper
results.add( new PluginWrapper( (ReportPlugin) o ) );
}
}
-
}
}
return results;
}
+
+ /**
+ *
+ * @param o either Plugin or ReportPlugin
+ * @return
+ */
+ public static Optional<Boolean> isVersionFromDefaultLifecycleBindings(
InputLocationTracker o )
+ {
+ InputLocation versionLocation = o.getLocation( "version" );
+ if ( versionLocation == null )
+ {
+ return Optional.empty();
+ }
+
+ String modelId = versionLocation.getSource().getModelId();
+ return Optional.of( modelId.startsWith( "org.apache.maven:maven-core:"
)
+ && modelId.endsWith( ":default-lifecycle-bindings"
) );
+ }
+
+ /**
+ *
+ * @param o either Plugin or ReportPlugin
+ * @return null if untraceable, otherwise its matching value
+ */
+ public static Optional<Boolean> isVersionFromSuperpom(
InputLocationTracker o )
+ {
+ InputLocation versionLocation = o.getLocation( "version" );
+ if ( versionLocation == null )
+ {
+ return Optional.empty();
+ }
+
+ String modelId = versionLocation.getSource().getModelId();
+ return Optional.of( 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/mrm/repository/menforcer359-1.0.pom
b/maven-enforcer-plugin/src/it/mrm/repository/menforcer359-1.0.pom
index 38b9e01..df05e31 100644
--- a/maven-enforcer-plugin/src/it/mrm/repository/menforcer359-1.0.pom
+++ b/maven-enforcer-plugin/src/it/mrm/repository/menforcer359-1.0.pom
@@ -23,6 +23,7 @@
<groupId>org.apache.maven.plugins.enforcer.its</groupId>
<artifactId>menforcer359</artifactId>
<version>1.0</version>
+ <packaging>pom</packaging>
<build>
<pluginManagement>
diff --git
a/maven-enforcer-plugin/src/it/projects/require-plugin-versions-ci/verify.groovy
b/maven-enforcer-plugin/src/it/projects/require-plugin-versions-ci/verify.groovy
index d098917..574942c 100644
---
a/maven-enforcer-plugin/src/it/projects/require-plugin-versions-ci/verify.groovy
+++
b/maven-enforcer-plugin/src/it/projects/require-plugin-versions-ci/verify.groovy
@@ -18,4 +18,4 @@
*/
File buildLog = new File( basedir, 'build.log' )
assert buildLog.text.contains( '[WARNING] Rule 0:
org.apache.maven.plugins.enforcer.RequirePluginVersions failed with message:' )
-assert buildLog.text.contains( 'Some plugins are missing valid versions:
(LATEST RELEASE SNAPSHOT are not allowed)' )
+assert buildLog.text.contains( "Some plugins are missing valid versions or
depend on Maven ${mavenVersion} defaults: (LATEST RELEASE SNAPSHOT are not
allowed)" )
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_inherit/pom.xml
b/maven-enforcer-plugin/src/it/projects/require-plugin-versions_failure/pom.xml
similarity index 86%
copy from
maven-enforcer-plugin/src/it/projects/require-plugin-versions_inherit/pom.xml
copy to
maven-enforcer-plugin/src/it/projects/require-plugin-versions_failure/pom.xml
index 6208ba2..72bef8b 100644
---
a/maven-enforcer-plugin/src/it/projects/require-plugin-versions_inherit/pom.xml
+++
b/maven-enforcer-plugin/src/it/projects/require-plugin-versions_failure/pom.xml
@@ -26,8 +26,9 @@ under the License.
<artifactId>test</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
-
- <url>https://issues.apache.org/jira/browse/MENFORCER-359</url>
+
+ <description>
+ </description>
<build>
<plugins>
@@ -44,8 +45,7 @@ under the License.
<configuration>
<rules>
<requirePluginVersions>
- <banSnapshots>false</banSnapshots> <!--
maven-enforcer-plugin -->
-
<unCheckedPluginList>org.apache.maven.plugins:maven-wrapper-plugin</unCheckedPluginList>
+ <banSnapshots>false</banSnapshots>
</requirePluginVersions>
</rules>
</configuration>
diff --git
a/maven-enforcer-plugin/src/it/projects/require-plugin-versions_inherit/pom.xml
b/maven-enforcer-plugin/src/it/projects/require-plugin-versions_inherit/pom.xml
index 6208ba2..c049b33 100644
---
a/maven-enforcer-plugin/src/it/projects/require-plugin-versions_inherit/pom.xml
+++
b/maven-enforcer-plugin/src/it/projects/require-plugin-versions_inherit/pom.xml
@@ -22,6 +22,12 @@ under the License.
<project>
<modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.maven.plugins.enforcer.its</groupId>
+ <artifactId>menforcer359</artifactId>
+ <version>1.0</version>
+ </parent>
+
<groupId>org.apache.maven.its.enforcer</groupId>
<artifactId>test</artifactId>
<version>1.0</version>