Pin Java version to 1.8.0_312 for Spring Data 2.x.

Closes #200
This commit is contained in:
Mark Paluch
2022-01-18 08:56:10 +01:00
parent 2f28d04eb1
commit 0df875c11b
3 changed files with 37 additions and 6 deletions

View File

@@ -52,7 +52,8 @@ import com.dd.plist.XMLPropertyListParser;
*/ */
public class JavaRuntimes { public class JavaRuntimes {
private static final List<JdkDetector> DETECTORS = Arrays.asList(new SDKmanJdkDetector(), new MacNativeJdkDetector()); private static final List<JdkDetector> DETECTORS = Arrays.asList(new SDKmanJdkDetector(), new MacNativeJdkDetector(),
new JavaHomeJdkDetector());
private static final Lazy<List<JdkInstallation>> JDKS = Lazy.of(() -> { private static final Lazy<List<JdkInstallation>> JDKS = Lazy.of(() -> {
List<JdkInstallation> jdks = DETECTORS.stream().flatMap(it -> it.detect().stream()).sorted() List<JdkInstallation> 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<JdkInstallation> 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 * Detector using the {@code /usr/libexec/java_home} utility storing Java installations in {@code /Libraries/Java} on
* the Mac. * the Mac.
@@ -218,12 +241,12 @@ public class JavaRuntimes {
String jvmHomePath = dict.get("JVMHomePath").toJavaObject(String.class); String jvmHomePath = dict.get("JVMHomePath").toJavaObject(String.class);
String name = dict.get("JVMName").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 matcher = VERSION.matcher(version);
matcher.find(); 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()); }).collect(Collectors.toList());
} }

View File

@@ -27,12 +27,20 @@ import java.util.function.Predicate;
@Value(staticConstructor = "of") @Value(staticConstructor = "of")
public class JavaVersion { public class JavaVersion {
public static final JavaVersion JAVA_8 = of("Java 1.8", public static final JavaVersion JAVA_8 = of("1.8.0_312");
version -> version.getMajor() == 1 && version.getMinor() == 8);
public static final JavaVersion JAVA_17 = of("Java 17", version -> version.getMajor() == 17); public static final JavaVersion JAVA_17 = of("Java 17", version -> version.getMajor() == 17);
String name; String name;
Predicate<Version> versionDetector; Predicate<Version> 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('_', '.'));
}
} }

View File

@@ -26,7 +26,7 @@ import org.springframework.data.release.model.Version;
* *
* @author Mark Paluch * @author Mark Paluch
*/ */
class JdkUtilityTests { class JavaRuntimesUnitTests {
@Test @Test
void shouldDiscoverCurrentJavaVersion() { void shouldDiscoverCurrentJavaVersion() {