This is an automated email from the ASF dual-hosted git repository. kwin pushed a commit to branch feature/improve-message-for-failed-version-rule in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git
commit 4db0e5509a70a4d671be5e086baf4264b60396dd Author: Konrad Windszus <k...@apache.org> AuthorDate: Fri Jan 6 15:14:57 2023 +0100 [MENFORCER-444] Improve error message for failed version rules 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