diff --git a/core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/GraalVM.java b/core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/GraalVM.java index 734575f2f0333..2aa16d5165c0c 100644 --- a/core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/GraalVM.java +++ b/core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/GraalVM.java @@ -15,6 +15,7 @@ public final class GraalVM { // Implements version parsing after https://github.com/oracle/graal/pull/6302 static final class VersionParseHelper { + private static final String EA_BUILD_PREFIX = "-ea"; private static final String JVMCI_BUILD_PREFIX = "jvmci-"; private static final String MANDREL_VERS_PREFIX = "Mandrel-"; @@ -103,11 +104,10 @@ private static String libericaVersion(String vendorVersion) { if (vendorVersion == null) { return null; } - int idx = vendorVersion.indexOf(LIBERICA_NIK_VERS_PREFIX); - if (idx < 0) { + final String version = buildVersion(vendorVersion, LIBERICA_NIK_VERS_PREFIX); + if (version == null) { return null; } - String version = vendorVersion.substring(idx + LIBERICA_NIK_VERS_PREFIX.length()); return matchVersion(version); } @@ -122,11 +122,10 @@ private static String mandrelVersion(String vendorVersion) { if (vendorVersion == null) { return null; } - int idx = vendorVersion.indexOf(MANDREL_VERS_PREFIX); - if (idx < 0) { + final String version = buildVersion(vendorVersion, MANDREL_VERS_PREFIX); + if (version == null) { return null; } - String version = vendorVersion.substring(idx + MANDREL_VERS_PREFIX.length()); return matchVersion(version); } @@ -142,11 +141,13 @@ private static String graalVersion(String buildInfo, int jdkFeature) { if (buildInfo == null) { return null; } - int idx = buildInfo.indexOf(JVMCI_BUILD_PREFIX); - if (idx < 0) { - return null; + String version = buildVersion(buildInfo, JVMCI_BUILD_PREFIX); + if (version == null) { + version = buildVersion(buildInfo, EA_BUILD_PREFIX); + if (version == null) { + return null; + } } - String version = buildInfo.substring(idx + JVMCI_BUILD_PREFIX.length()); Matcher versMatcher = VERSION_PATTERN.matcher(version); if (versMatcher.find()) { return matchVersion(version); @@ -154,6 +155,14 @@ private static String graalVersion(String buildInfo, int jdkFeature) { return GRAAL_MAPPING.get(jdkFeature); } } + + private static String buildVersion(String buildInfo, String buildPrefix) { + int idx = buildInfo.indexOf(buildPrefix); + if (idx < 0) { + return null; + } + return buildInfo.substring(idx + buildPrefix.length()); + } } // Temporarily work around https://github.com/quarkusio/quarkus/issues/36246, @@ -161,8 +170,8 @@ private static String graalVersion(String buildInfo, int jdkFeature) { // https://github.com/quarkusio/quarkus/issues/34161 private static final Map GRAAL_MAPPING = Map.of(22, "24.0", 23, "24.1", - 24, "25.0", - 25, "25.1"); + 24, "24.2", + 25, "25.0"); public static final class Version implements Comparable { diff --git a/core/deployment/src/test/java/io/quarkus/deployment/pkg/steps/GraalVMTest.java b/core/deployment/src/test/java/io/quarkus/deployment/pkg/steps/GraalVMTest.java index 9af2755056560..647bd3a28474b 100644 --- a/core/deployment/src/test/java/io/quarkus/deployment/pkg/steps/GraalVMTest.java +++ b/core/deployment/src/test/java/io/quarkus/deployment/pkg/steps/GraalVMTest.java @@ -165,6 +165,19 @@ public void testGraalVMEE22DevVersionParser() { assertThat(graalVMEE22Dev.javaVersion.update()).isEqualTo(0); } + @Test + public void testGraalVMEA24DevVersionParser() { + final Version graalVMEA24Dev = Version.of(Stream.of(("native-image 24-ea 2025-03-18\n" + + "OpenJDK Runtime Environment Oracle GraalVM 24-dev.ea+10.1 (build 24-ea+10-1076)\n" + + "OpenJDK 64-Bit Server VM Oracle GraalVM 24-dev.ea+10.1 (build 24-ea+10-1076, mixed mode, sharing)") + .split("\\n"))); + assertThat(graalVMEA24Dev.distribution.name()).isEqualTo("GRAALVM"); + assertThat(graalVMEA24Dev.getVersionAsString()).isEqualTo("24.2-dev"); + assertThat(graalVMEA24Dev.javaVersion.toString()).isEqualTo("24-ea+10-1076"); + assertThat(graalVMEA24Dev.javaVersion.feature()).isEqualTo(24); + assertThat(graalVMEA24Dev.javaVersion.update()).isEqualTo(0); + } + @Test public void testGraalVMVersionsOlderThan() { assertOlderThan("GraalVM Version 19.3.6 CE", "GraalVM Version 20.2.0 (Java Version 11.0.9)");