diff --git a/PCL.Mac.Core/Managers/JavaManager.swift b/PCL.Mac.Core/Managers/JavaManager.swift index 1ff0c32..db0e641 100644 --- a/PCL.Mac.Core/Managers/JavaManager.swift +++ b/PCL.Mac.Core/Managers/JavaManager.swift @@ -19,6 +19,14 @@ public final class JavaManager { private init() { do { self.javaRuntimes = try JavaSearcher.search() + log("Java 搜索完成,共 \(javaRuntimes.count) 个:") + for javaRuntime in javaRuntimes { + let type: String = .init(describing: javaRuntime.type).padding(toLength: 4, withPad: " ", startingAt: 0) + let version: String = .init(describing: javaRuntime.version).padding(toLength: 10, withPad: " ", startingAt: 0) + let arch: String = .init(describing: javaRuntime.architecture).padding(toLength: 8, withPad: " ", startingAt: 0) + let impl: String = javaRuntime.implementor.padding(toLength: 24, withPad: " ", startingAt: 0) + log("\(type) \(version)\t\(arch)\t\(impl)\t\(javaRuntime.executableURL.path)") + } } catch { err("搜索 Java 失败:\(error.localizedDescription)") self.javaRuntimes = [] diff --git a/PCL.Mac.Core/Models/JavaRuntime.swift b/PCL.Mac.Core/Models/JavaRuntime.swift index 692301c..517134d 100644 --- a/PCL.Mac.Core/Models/JavaRuntime.swift +++ b/PCL.Mac.Core/Models/JavaRuntime.swift @@ -21,7 +21,14 @@ public struct JavaRuntime { /// `java` 可执行文件 URL。 public let executableURL: URL - public enum JavaType { + public enum JavaType: CustomStringConvertible { case jdk, jre + + public var description: String { + switch self { + case .jdk: "JDK" + case .jre: "JRE" + } + } } } diff --git a/PCL.Mac.Core/Services/JavaSearcher.swift b/PCL.Mac.Core/Services/JavaSearcher.swift index 4b05b17..3126e01 100644 --- a/PCL.Mac.Core/Services/JavaSearcher.swift +++ b/PCL.Mac.Core/Services/JavaSearcher.swift @@ -120,14 +120,21 @@ public enum JavaSearcher { private static func findJavaBundles() throws -> [URL] { var bundleDirectories: [URL] = [] - for directory in javaDirectories { + for directory in javaDirectories where FileManager.default.fileExists(atPath: directory.path) { bundleDirectories.append(contentsOf: try FileManager.default.contentsOfDirectory(at: directory, includingPropertiesForKeys: nil)) } // Homebrew - let homebrewDirectories: [URL] = try FileManager.default.contentsOfDirectory(at: URL(fileURLWithPath: "/opt/homebrew/opt"), includingPropertiesForKeys: nil) - .filter { $0.lastPathComponent.starts(with: "openjdk@") } - for directory in homebrewDirectories { - bundleDirectories.append(directory.appending(path: "libexec").appending(path: "openjdk.jdk")) + let homebrewRoot: URL = .init(fileURLWithPath: "/opt/homebrew/opt") + if FileManager.default.fileExists(atPath: homebrewRoot.path) { + do { + let homebrewDirectories: [URL] = try FileManager.default.contentsOfDirectory(at: homebrewRoot, includingPropertiesForKeys: nil) + .filter { $0.lastPathComponent.starts(with: "openjdk@") } + for directory in homebrewDirectories { + bundleDirectories.append(directory.appending(path: "libexec").appending(path: "openjdk.jdk")) + } + } catch { + err("搜索 Homebrew 目录失败:\(error.localizedDescription)") + } } return bundleDirectories.filter { FileManager.default.fileExists(atPath: $0.appending(path: "Contents/Home/release").path) } } diff --git a/PCL.Mac/App/AppDelegate.swift b/PCL.Mac/App/AppDelegate.swift index c073931..4c01b84 100644 --- a/PCL.Mac/App/AppDelegate.swift +++ b/PCL.Mac/App/AppDelegate.swift @@ -45,6 +45,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { try SwiftScaffolding.Logger.enableLogging(url: URLConstants.logsDirectoryURL.appending(path: "swift-scaffolding.log")) } _ = LauncherConfig.shared + _ = JavaManager.shared executeTask("清理临时文件") { for url in try FileManager.default.contentsOfDirectory(at: URLConstants.tempURL, includingPropertiesForKeys: nil) { try FileManager.default.removeItem(at: url)