@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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('_', '.'));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
Reference in New Issue
Block a user