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