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.git


The following commit(s) were added to refs/heads/master by this push:
     new 3d0939662 [MNG-7611] Change semantics of plugin descriptor's 
"requiredJavaVersion" (#888)
3d0939662 is described below

commit 3d0939662a942df5ab25a5e6a5c8723b6ed8d8ec
Author: Konrad Windszus <[email protected]>
AuthorDate: Thu Dec 1 21:54:09 2022 +0100

    [MNG-7611] Change semantics of plugin descriptor's "requiredJavaVersion" 
(#888)
    
    Always assume version constraint (the same as in requiredMavenVersion)
---
 .../MavenPluginJavaPrerequisiteChecker.java        | 34 ++++++++++++++++++--
 .../MavenPluginJavaPrerequisiteCheckerTest.java    | 37 ++++++++++++++++++++++
 maven-plugin-api/src/main/mdo/plugin.mdo           |  2 +-
 3 files changed, 70 insertions(+), 3 deletions(-)

diff --git 
a/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginJavaPrerequisiteChecker.java
 
b/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginJavaPrerequisiteChecker.java
index 618d46181..d9984e13a 100644
--- 
a/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginJavaPrerequisiteChecker.java
+++ 
b/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginJavaPrerequisiteChecker.java
@@ -18,26 +18,56 @@
  */
 package org.apache.maven.plugin.internal;
 
+import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
-import org.apache.maven.model.profile.activation.JdkVersionProfileActivator;
 import org.apache.maven.plugin.MavenPluginPrerequisitesChecker;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.aether.version.InvalidVersionSpecificationException;
+import org.eclipse.aether.version.Version;
+import org.eclipse.aether.version.VersionConstraint;
+import org.eclipse.aether.version.VersionScheme;
 
 @Named
 @Singleton
 public class MavenPluginJavaPrerequisiteChecker implements 
MavenPluginPrerequisitesChecker {
 
+    private final VersionScheme versionScheme;
+
+    @Inject
+    public MavenPluginJavaPrerequisiteChecker(final VersionScheme 
versionScheme) {
+        this.versionScheme = versionScheme;
+    }
+
     @Override
     public void accept(PluginDescriptor pluginDescriptor) {
         String requiredJavaVersion = pluginDescriptor.getRequiredJavaVersion();
         if (StringUtils.isNotBlank(requiredJavaVersion)) {
             String currentJavaVersion = System.getProperty("java.version");
-            if 
(!JdkVersionProfileActivator.isJavaVersionCompatible(requiredJavaVersion, 
currentJavaVersion)) {
+            if (!matchesVersion(requiredJavaVersion, currentJavaVersion)) {
                 throw new IllegalStateException("Required Java version " + 
requiredJavaVersion
                         + " is not met by current version: " + 
currentJavaVersion);
             }
         }
     }
+
+    boolean matchesVersion(String requiredVersion, String currentVersion) {
+        VersionConstraint constraint;
+        try {
+            constraint = versionScheme.parseVersionConstraint(requiredVersion);
+        } catch (InvalidVersionSpecificationException e) {
+            throw new IllegalArgumentException("Invalid 'requiredJavaVersion' 
given in plugin descriptor", e);
+        }
+        Version current;
+        try {
+            current = versionScheme.parseVersion(currentVersion);
+        } catch (InvalidVersionSpecificationException e) {
+            throw new IllegalStateException("Could not parse current Java 
version", e);
+        }
+        if (constraint.getRange() == null) {
+            return constraint.getVersion().compareTo(current) <= 0;
+        }
+        return constraint.containsVersion(current);
+    }
 }
diff --git 
a/maven-core/src/test/java/org/apache/maven/plugin/internal/MavenPluginJavaPrerequisiteCheckerTest.java
 
b/maven-core/src/test/java/org/apache/maven/plugin/internal/MavenPluginJavaPrerequisiteCheckerTest.java
new file mode 100644
index 000000000..b95b99d9e
--- /dev/null
+++ 
b/maven-core/src/test/java/org/apache/maven/plugin/internal/MavenPluginJavaPrerequisiteCheckerTest.java
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+package org.apache.maven.plugin.internal;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.eclipse.aether.util.version.GenericVersionScheme;
+import org.junit.jupiter.api.Test;
+
+class MavenPluginJavaPrerequisiteCheckerTest {
+
+    @Test
+    void testMatchesVersion() {
+        MavenPluginJavaPrerequisiteChecker checker = new 
MavenPluginJavaPrerequisiteChecker(new GenericVersionScheme());
+        assertTrue(checker.matchesVersion("1.0", "1.8"));
+        assertTrue(checker.matchesVersion("1.8", "9.0.1+11"));
+        assertFalse(checker.matchesVersion("[1.0,2],[3,4]", "2.1"));
+        assertTrue(checker.matchesVersion("[1.0,2],[3,4]", "3.1"));
+        assertThrows(IllegalArgumentException.class, () -> 
checker.matchesVersion("(1.0,0)", "11"));
+    }
+}
diff --git a/maven-plugin-api/src/main/mdo/plugin.mdo 
b/maven-plugin-api/src/main/mdo/plugin.mdo
index ddb2fd62a..de4ea4b85 100644
--- a/maven-plugin-api/src/main/mdo/plugin.mdo
+++ b/maven-plugin-api/src/main/mdo/plugin.mdo
@@ -99,7 +99,7 @@ under the License.
         <field>
           <name>requiredJavaVersion</name>
           <version>1.1.0+</version>
-          <description>A version range which specifies the supported Java 
versions. The same values as for POM profile activation element 'jdk' are 
allowed, i.e. version ranges, version prefixes and negated version prefixes 
(starting with '!').</description>
+          <description>A version range which specifies the supported Java 
versions. A version range can either use the usual mathematical syntax 
"[2.0.10,2.1.0),[3.0,)" or use a single version "2.2.1". The latter is a short 
form for "[2.2.1,)", i.e. denotes the minimum version required.</description>
           <type>String</type>
         </field>
         <field>

Reply via email to