[ https://issues.apache.org/jira/browse/MNG-7611?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17642154#comment-17642154 ]
ASF GitHub Bot commented on MNG-7611: ------------------------------------- gnodet commented on code in PR #888: URL: https://github.com/apache/maven/pull/888#discussion_r1037528525 ########## maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginJavaPrerequisiteChecker.java: ########## @@ -18,26 +18,57 @@ */ 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.getMessage(), e); + } + Version current; + try { + current = versionScheme.parseVersion(currentVersion); + } catch (InvalidVersionSpecificationException e) { + throw new IllegalStateException("Could not parse current Java version: " + e.getMessage(), e); Review Comment: Why not ? For the record, I would argue that gives a hint to the cause without having to read the full stack trace. Maybe even `("xxx" + e, e)` can be useful some time... ########## maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginJavaPrerequisiteChecker.java: ########## @@ -18,26 +18,57 @@ */ 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.getMessage(), e); + } + Version current; + try { + current = versionScheme.parseVersion(currentVersion); + } catch (InvalidVersionSpecificationException e) { + throw new IllegalStateException("Could not parse current Java version: " + e.getMessage(), e); Review Comment: Why not ? For the record, I would argue that it gives a hint to the cause without having to read the full stack trace. Maybe even `("xxx" + e, e)` can be useful some time... > java.lang.IllegalStateException: Required Java version 1.8 is not met by > current version: 17.0.5 > ------------------------------------------------------------------------------------------------ > > Key: MNG-7611 > URL: https://issues.apache.org/jira/browse/MNG-7611 > Project: Maven > Issue Type: Task > Reporter: Guillaume Nodet > Assignee: Konrad Windszus > Priority: Major > Fix For: 4.0.0-alpha-3 > > > {code:java} > Caused by: java.lang.IllegalStateException: Required Java version 1.8 is not > met by current version: 17.0.5 > at > org.apache.maven.plugin.internal.MavenPluginJavaPrerequisiteChecker.accept(MavenPluginJavaPrerequisiteChecker.java:38) > at > org.apache.maven.plugin.internal.DefaultMavenPluginManager.lambda$checkPrerequisites$1(DefaultMavenPluginManager.java:289) > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)