diff --git a/drivers/java/driver.go b/drivers/java/driver.go index 220935046941..7696e115ea6b 100644 --- a/drivers/java/driver.go +++ b/drivers/java/driver.go @@ -223,6 +223,18 @@ func (d *Driver) buildFingerprint() *drivers.Fingerprint { return fp } } + if runtime.GOOS == "darwin" { + _, err := checkForMacJVM() + if err != nil { + // return no error, as it isn't an error to not find java, it just means we + // can't use it. + + fp.Health = drivers.HealthStateUndetected + fp.HealthDescription = "" + d.logger.Trace("macOS jvm not found", "error", err) + return fp + } + } version, runtime, vm, err := javaVersionInfo() if err != nil { diff --git a/drivers/java/utils.go b/drivers/java/utils.go index b41eec691376..1615ea643d00 100644 --- a/drivers/java/utils.go +++ b/drivers/java/utils.go @@ -5,14 +5,38 @@ import ( "fmt" "os/exec" "regexp" + rt "runtime" "strings" ) var javaVersionCommand = []string{"java", "-version"} +var macOSJavaTestCommand = "/usr/libexec/java_home" + +func checkForMacJVM() (ok bool, err error) { + // test for java differently because of the shim application + var out bytes.Buffer + cmd := exec.Command(macOSJavaTestCommand) + cmd.Stdout = &out + cmd.Stderr = &out + err = cmd.Run() + if err != nil { + err = fmt.Errorf("failed check for macOS jvm: %v, out: %v", err, strings.Replace(strings.Replace(out.String(), "\n", " ", -1), `"`, `\"`, -1)) + return false, err + } + return true, nil +} func javaVersionInfo() (version, runtime, vm string, err error) { var out bytes.Buffer + if rt.GOOS == "darwin" { + _, err = checkForMacJVM() + if err != nil { + err = fmt.Errorf("failed to check java version: %v", err) + return + } + } + cmd := exec.Command(javaVersionCommand[0], javaVersionCommand[1:]...) cmd.Stdout = &out cmd.Stderr = &out