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

[maven-enforcer] branch master updated: [MENFORCER-444] Improve error message for failed version rules (#218)

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

kwin 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 49ff49a  [MENFORCER-444] Improve error message for failed version rules (#218)
49ff49a is described below

commit 49ff49a66cc92f573d73fe9ce1f7eb98eff1a597
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Sat Jan 7 14:38:01 2023 +0100

    [MENFORCER-444] Improve error message for failed version rules (#218)
    
    Convert lower bound only value to proper range string in message
---
 .../maven/plugins/enforcer/AbstractVersionEnforcer.java | 12 ++++++++++--
 .../maven/plugins/enforcer/RequireJavaVersion.java      | 17 ++++++++++++++---
 .../maven/plugins/enforcer/TestRequireJavaVersion.java  |  2 +-
 3 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java
index 609de91..4e1bf62 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java
@@ -77,12 +77,12 @@ public abstract class AbstractVersionEnforcer extends AbstractStandardEnforcerRu
                     vr = VersionRange.createFromVersionSpec(requiredVersionRange);
 
                     if (containsVersion(vr, actualVersion)) {
-                        log.debug(msg + " is allowed in the range " + requiredVersionRange + ".");
+                        log.debug(msg + " is allowed in the range " + toString(vr) + ".");
                     } else {
                         String message = getMessage();
 
                         if (StringUtils.isEmpty(message)) {
-                            message = msg + " is not in the allowed range " + vr + ".";
+                            message = msg + " is not in the allowed range " + toString(vr) + ".";
                         }
 
                         throw new EnforcerRuleException(message);
@@ -95,6 +95,14 @@ public abstract class AbstractVersionEnforcer extends AbstractStandardEnforcerRu
         }
     }
 
+    protected static String toString(VersionRange vr) {
+        // as recommended version is used as lower bound in this context modify the string representation
+        if (vr.getRecommendedVersion() != null) {
+            return "[" + vr.getRecommendedVersion().toString() + ",)";
+        } else {
+            return vr.toString();
+        }
+    }
     /**
      * Copied from Artifact.VersionRange. This is tweaked to handle singular ranges properly. Currently the default
      * containsVersion method assumes a singular version means allow everything. This method assumes that "2.0.4" ==
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireJavaVersion.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireJavaVersion.java
index 87ea432..39b1733 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireJavaVersion.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireJavaVersion.java
@@ -27,6 +27,8 @@ import java.util.regex.Pattern;
 import org.apache.commons.lang3.SystemUtils;
 import org.apache.maven.artifact.versioning.ArtifactVersion;
 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
 import org.apache.maven.plugin.logging.Log;
@@ -76,7 +78,7 @@ public class RequireJavaVersion extends AbstractVersionEnforcer {
                 + " Build: " + detectedJdkVersion.getBuildNumber() + " Qualifier: "
                 + detectedJdkVersion.getQualifier());
 
-        setCustomMessageIfNoneConfigured(detectedJdkVersion, getVersion());
+        setCustomMessageIfNoneConfigured(detectedJdkVersion, getVersion(), log);
 
         enforceVersion(helper.getLog(), "JDK", getVersion(), detectedJdkVersion);
     }
@@ -115,11 +117,20 @@ public class RequireJavaVersion extends AbstractVersionEnforcer {
         return StringUtils.stripEnd(version, ".");
     }
 
-    private void setCustomMessageIfNoneConfigured(ArtifactVersion detectedJdkVersion, String allowedVersionRange) {
+    private void setCustomMessageIfNoneConfigured(
+            ArtifactVersion detectedJdkVersion, String allowedVersionRange, Log log) {
         if (getMessage() == null) {
+            String version;
+            try {
+                VersionRange vr = VersionRange.createFromVersionSpec(allowedVersionRange);
+                version = AbstractVersionEnforcer.toString(vr);
+            } catch (InvalidVersionSpecificationException e) {
+                log.debug("Could not parse allowed version range " + allowedVersionRange, e);
+                version = allowedVersionRange;
+            }
             String message = String.format(
                     "Detected JDK version %s (JAVA_HOME=%s) is not in the allowed range %s.",
-                    detectedJdkVersion, SystemUtils.JAVA_HOME, allowedVersionRange);
+                    detectedJdkVersion, SystemUtils.JAVA_HOME, version);
             super.setMessage(message);
         }
     }
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java
index 53cfbfe..4afecbb 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java
@@ -111,7 +111,7 @@ class TestRequireJavaVersion {
                 .isInstanceOf(EnforcerRuleException.class)
                 .hasMessage(
                         "Detected JDK version %s (JAVA_HOME=%s) is not in the allowed range %s.",
-                        thisVersion, SystemUtils.JAVA_HOME, requiredVersion);
+                        thisVersion, SystemUtils.JAVA_HOME, "[" + requiredVersion + ",)");
     }
 
     @Test