Fix JavaRuntime detection guards.

Closes #208
This commit is contained in:
Mark Paluch
2022-03-22 08:56:11 +01:00
parent 08742d5025
commit b76de059bb

View File

@@ -39,6 +39,7 @@ import org.springframework.boot.system.SystemProperties;
import org.springframework.data.release.model.JavaVersion; import org.springframework.data.release.model.JavaVersion;
import org.springframework.data.release.model.Version; import org.springframework.data.release.model.Version;
import org.springframework.data.util.Lazy; import org.springframework.data.util.Lazy;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StreamUtils; import org.springframework.util.StreamUtils;
import com.dd.plist.NSArray; import com.dd.plist.NSArray;
@@ -56,7 +57,10 @@ public class JavaRuntimes {
new JavaHomeJdkDetector()); 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() //
.filter(JdkDetector::isAvailable) //
.flatMap(it -> it.detect().stream()) //
.sorted() //
.collect(Collectors.toList()); .collect(Collectors.toList());
Collections.reverse(jdks); Collections.reverse(jdks);
@@ -95,6 +99,10 @@ public class JavaRuntimes {
return JDKS.get(); return JDKS.get();
} }
static boolean isDirectory(File file) {
return file.exists() && file.isDirectory();
}
/** /**
* JDK detection strategy. * JDK detection strategy.
*/ */
@@ -168,7 +176,7 @@ public class JavaRuntimes {
@Override @Override
public boolean isAvailable() { public boolean isAvailable() {
return sdkManJavaHome.exists() && sdkManJavaHome.isDirectory(); return isDirectory(sdkManJavaHome);
} }
@Override @Override
@@ -227,15 +235,14 @@ public class JavaRuntimes {
@Override @Override
public boolean isAvailable() { public boolean isAvailable() {
return javaHome.exists() && javaHome.isDirectory(); return isDirectory(javaHome);
} }
@Override @Override
public List<JdkInstallation> detect() { public List<JdkInstallation> detect() {
return Collections return Collections.singletonList(new JdkInstallation(JavaVersion.parse(javaVersion),
.singletonList(new JdkInstallation(JavaVersion.parse(javaVersion), toDisplayName(javaVendor, javaVersion), toDisplayName(javaVendor, javaVersion), normalizeImplementor(javaVendor), javaHome));
normalizeImplementor(javaVendor), javaHome));
} }
} }
@@ -247,11 +254,14 @@ public class JavaRuntimes {
private static final File javaHomeBinary = new File("/usr/libexec/java_home"); private static final File javaHomeBinary = new File("/usr/libexec/java_home");
private static final File nativeInstallationDirectory = new File("/Library/Java/JavaVirtualMachines");
private static final Pattern VERSION = Pattern.compile("((:?\\d+(:?\\.\\d+)*)(:?_+\\d+)?)"); private static final Pattern VERSION = Pattern.compile("((:?\\d+(:?\\.\\d+)*)(:?_+\\d+)?)");
@Override @Override
public boolean isAvailable() { public boolean isAvailable() {
return javaHomeBinary.exists() && SystemProperties.get("os.name").contains("Mac"); return isDirectory(nativeInstallationDirectory) && !ObjectUtils.isEmpty(nativeInstallationDirectory.listFiles())
&& javaHomeBinary.exists() && SystemProperties.get("os.name").contains("Mac");
} }
@Override @Override