From 0df875c11bfbb9b05b1dbfa50cf5e9cec5f1f9c5 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 18 Jan 2022 08:56:10 +0100 Subject: [PATCH] Pin Java version to 1.8.0_312 for Spring Data 2.x. Closes #200 --- .../data/release/io/JavaRuntimes.java | 29 +++++++++++++++++-- .../data/release/model/JavaVersion.java | 12 ++++++-- ...yTests.java => JavaRuntimesUnitTests.java} | 2 +- 3 files changed, 37 insertions(+), 6 deletions(-) rename release-tools/src/test/java/org/springframework/data/release/io/{JdkUtilityTests.java => JavaRuntimesUnitTests.java} (97%) diff --git a/release-tools/src/main/java/org/springframework/data/release/io/JavaRuntimes.java b/release-tools/src/main/java/org/springframework/data/release/io/JavaRuntimes.java index 2866097..766e3e2 100644 --- a/release-tools/src/main/java/org/springframework/data/release/io/JavaRuntimes.java +++ b/release-tools/src/main/java/org/springframework/data/release/io/JavaRuntimes.java @@ -52,7 +52,8 @@ import com.dd.plist.XMLPropertyListParser; */ public class JavaRuntimes { - private static final List DETECTORS = Arrays.asList(new SDKmanJdkDetector(), new MacNativeJdkDetector()); + private static final List DETECTORS = Arrays.asList(new SDKmanJdkDetector(), new MacNativeJdkDetector(), + new JavaHomeJdkDetector()); private static final Lazy> JDKS = Lazy.of(() -> { List jdks = DETECTORS.stream().flatMap(it -> it.detect().stream()).sorted() @@ -179,6 +180,28 @@ public class JavaRuntimes { } } + /** + * Detector using the {@code java.home} system property. + */ + static class JavaHomeJdkDetector implements JdkDetector { + + private static final File javaHome = new File(System.getProperty("java.home")); + private static final String javaVersion = System.getProperty("java.version"); + private static final String javaVendor = System.getProperty("java.vendor"); + + @Override + public boolean isAvailable() { + return javaHome.exists() && javaHome.isDirectory(); + } + + @Override + public List detect() { + + return Collections + .singletonList(new JdkInstallation(JavaVersion.parse(javaVersion), javaVendor + " " + javaVersion, javaHome)); + } + } + /** * Detector using the {@code /usr/libexec/java_home} utility storing Java installations in {@code /Libraries/Java} on * the Mac. @@ -218,12 +241,12 @@ public class JavaRuntimes { String jvmHomePath = dict.get("JVMHomePath").toJavaObject(String.class); String name = dict.get("JVMName").toJavaObject(String.class); - String version = dict.get("JVMVersion").toJavaObject(String.class).replace('_', '.'); + String version = dict.get("JVMVersion").toJavaObject(String.class); Matcher matcher = VERSION.matcher(version); matcher.find(); - return new JdkInstallation(Version.parse(matcher.group(1)), name, new File(jvmHomePath)); + return new JdkInstallation(JavaVersion.parse(matcher.group(1)), name, new File(jvmHomePath)); }).collect(Collectors.toList()); } diff --git a/release-tools/src/main/java/org/springframework/data/release/model/JavaVersion.java b/release-tools/src/main/java/org/springframework/data/release/model/JavaVersion.java index 9c673bf..54cecfc 100644 --- a/release-tools/src/main/java/org/springframework/data/release/model/JavaVersion.java +++ b/release-tools/src/main/java/org/springframework/data/release/model/JavaVersion.java @@ -27,12 +27,20 @@ import java.util.function.Predicate; @Value(staticConstructor = "of") public class JavaVersion { - public static final JavaVersion JAVA_8 = of("Java 1.8", - version -> version.getMajor() == 1 && version.getMinor() == 8); + public static final JavaVersion JAVA_8 = of("1.8.0_312"); public static final JavaVersion JAVA_17 = of("Java 17", version -> version.getMajor() == 17); String name; Predicate versionDetector; + public static JavaVersion of(String version) { + Version expectedVersion = parse(version); + return of("Java " + version, candidate -> candidate.is(expectedVersion)); + } + + public static Version parse(String version) { + return Version.parse(version.replace('_', '.')); + } + } diff --git a/release-tools/src/test/java/org/springframework/data/release/io/JdkUtilityTests.java b/release-tools/src/test/java/org/springframework/data/release/io/JavaRuntimesUnitTests.java similarity index 97% rename from release-tools/src/test/java/org/springframework/data/release/io/JdkUtilityTests.java rename to release-tools/src/test/java/org/springframework/data/release/io/JavaRuntimesUnitTests.java index 2c71ea3..0b2eaad 100644 --- a/release-tools/src/test/java/org/springframework/data/release/io/JdkUtilityTests.java +++ b/release-tools/src/test/java/org/springframework/data/release/io/JavaRuntimesUnitTests.java @@ -26,7 +26,7 @@ import org.springframework.data.release.model.Version; * * @author Mark Paluch */ -class JdkUtilityTests { +class JavaRuntimesUnitTests { @Test void shouldDiscoverCurrentJavaVersion() {