You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2022/12/13 22:20:52 UTC

[maven-enforcer] 01/01: [MENFORCER-440] Allow 8 as JDK version for requireJavaVersion

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

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

commit 3e42fac3b6d0909f3c1b056ab7d1c39d1788cccb
Author: Slawomir Jaranowski <s....@gmail.com>
AuthorDate: Tue Dec 13 23:20:32 2022 +0100

    [MENFORCER-440] Allow 8 as JDK version for requireJavaVersion
---
 enforcer-rules/pom.xml                             |  5 +++
 .../plugins/enforcer/AbstractVersionEnforcer.java  |  2 +-
 .../maven/plugins/enforcer/RequireJavaVersion.java | 24 ++++++++++++++
 .../src/site/apt/requireJavaVersion.apt.vm         |  2 ++
 .../plugins/enforcer/TestRequireJavaVersion.java   | 38 ++++++++++++++++++----
 5 files changed, 64 insertions(+), 7 deletions(-)

diff --git a/enforcer-rules/pom.xml b/enforcer-rules/pom.xml
index a974cd4..1116ce0 100644
--- a/enforcer-rules/pom.xml
+++ b/enforcer-rules/pom.xml
@@ -102,6 +102,11 @@
       <version>2.2</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-params</artifactId>
+      <scope>test</scope>
+    </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
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 5883ad1..609de91 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
@@ -159,7 +159,7 @@ public abstract class AbstractVersionEnforcer extends AbstractStandardEnforcerRu
      *
      * @param theVersion the required version to set
      */
-    public final void setVersion(String theVersion) {
+    public void setVersion(String theVersion) {
         this.version = theVersion;
     }
 }
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 624f112..c682cc6 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
@@ -21,6 +21,8 @@ package org.apache.maven.plugins.enforcer;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
+import java.util.regex.Matcher;
+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;
@@ -35,6 +37,28 @@ import org.codehaus.plexus.util.StringUtils;
  * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
  */
 public class RequireJavaVersion extends AbstractVersionEnforcer {
+
+    private static final Pattern JDK8_VERSION_PATTERN = Pattern.compile("([\\[(,]?)(1\\.8|8)([]),]?)");
+
+    @Override
+    public void setVersion(String theVersion) {
+
+        if ("8".equals(theVersion)) {
+            super.setVersion("1.8");
+            return;
+        }
+
+        Matcher matcher = JDK8_VERSION_PATTERN.matcher(theVersion);
+
+        StringBuffer result = new StringBuffer();
+        while (matcher.find()) {
+            matcher.appendReplacement(result, "$11.8$3");
+        }
+        matcher.appendTail(result);
+
+        super.setVersion(result.toString());
+    }
+
     @Override
     public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {
         String javaVersion = SystemUtils.JAVA_VERSION;
diff --git a/enforcer-rules/src/site/apt/requireJavaVersion.apt.vm b/enforcer-rules/src/site/apt/requireJavaVersion.apt.vm
index 1c0921f..9b32b51 100644
--- a/enforcer-rules/src/site/apt/requireJavaVersion.apt.vm
+++ b/enforcer-rules/src/site/apt/requireJavaVersion.apt.vm
@@ -32,6 +32,8 @@ Require Java Version
    * message - an optional message to the user if the rule fails.
    
    * {{{../apidocs/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.html#version}version}} - {{{./versionRanges.html}range}} of allowed JDKs.
+
+   For JDK 1.8 you can also use simple <<<8>>> as <version> - it will be internally changed to <<<1.8>>>
    
    []
 
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 48bf29b..d32441e 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
@@ -21,24 +21,28 @@ package org.apache.maven.plugins.enforcer;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
+import java.util.stream.Stream;
 import org.apache.commons.lang3.SystemUtils;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 /**
  * The Class TestRequireJavaVersion.
  *
  * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
  */
-public class TestRequireJavaVersion {
+class TestRequireJavaVersion {
 
     /**
      * Test fix jdk version.
      */
     @Test
-    public void testFixJDKVersion() {
+    void testFixJDKVersion() {
         // test that we only take the first 3 versions for
         // comparison
         assertThat(RequireJavaVersion.normalizeJDKVersion("1.5.0_11")).isEqualTo("1.5.0-11");
@@ -69,7 +73,7 @@ public class TestRequireJavaVersion {
      * @throws EnforcerRuleException the enforcer rule exception
      */
     @Test
-    public void settingsTheJavaVersionAsNormalizedVersionShouldNotFail() throws EnforcerRuleException {
+    void settingsTheJavaVersionAsNormalizedVersionShouldNotFail() throws EnforcerRuleException {
         String normalizedJDKVersion = RequireJavaVersion.normalizeJDKVersion(SystemUtils.JAVA_VERSION);
 
         RequireJavaVersion rule = new RequireJavaVersion();
@@ -83,7 +87,7 @@ public class TestRequireJavaVersion {
     }
 
     @Test
-    public void excludingTheCurrentJavaVersionViaRangeThisShouldFailWithException() {
+    void excludingTheCurrentJavaVersionViaRangeThisShouldFailWithException() {
         assertThrows(EnforcerRuleException.class, () -> {
             String thisVersion = RequireJavaVersion.normalizeJDKVersion(SystemUtils.JAVA_VERSION);
 
@@ -101,7 +105,7 @@ public class TestRequireJavaVersion {
     @Test
     @Disabled
     // TODO: Think about the intention of this test? What should it prove?
-    public void thisShouldNotCrash() throws EnforcerRuleException {
+    void thisShouldNotCrash() throws EnforcerRuleException {
         RequireJavaVersion rule = new RequireJavaVersion();
         rule.setVersion(SystemUtils.JAVA_VERSION);
 
@@ -114,8 +118,30 @@ public class TestRequireJavaVersion {
      * Test id.
      */
     @Test
-    public void testId() {
+    void testId() {
         RequireJavaVersion rule = new RequireJavaVersion();
         assertThat(rule.getCacheId()).isEqualTo("0");
     }
+
+    static Stream<Arguments> fixJava8ShortVersion() {
+        return Stream.of(
+                Arguments.of("1.8", "1.8"),
+                Arguments.of("8", "1.8"),
+                Arguments.of("8,)", "1.8,)"),
+                Arguments.of("[8,)", "[1.8,)"),
+                Arguments.of("(1.7,8]", "(1.7,1.8]"),
+                Arguments.of("[1.8,)", "[1.8,)"),
+                Arguments.of("(1.8,8]", "(1.8,1.8]"),
+                Arguments.of("(8,)", "(1.8,)"),
+                Arguments.of("[8]", "[1.8]"),
+                Arguments.of("(9,11],[8]", "(9,11],[1.8]"));
+    }
+
+    @ParameterizedTest
+    @MethodSource
+    void fixJava8ShortVersion(String input, String expected) {
+        RequireJavaVersion requireJavaVersion = new RequireJavaVersion();
+        requireJavaVersion.setVersion(input);
+        assertThat(requireJavaVersion.getVersion()).isEqualTo(expected);
+    }
 }