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:51 UTC

[maven-enforcer] branch MENFORCER-440 created (now 3e42fac)

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

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


      at 3e42fac  [MENFORCER-440] Allow 8 as JDK version for requireJavaVersion

This branch includes the following new commits:

     new 3e42fac  [MENFORCER-440] Allow 8 as JDK version for requireJavaVersion

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



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

Posted by sj...@apache.org.
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);
+    }
 }