Mac OS 上設定 JAVA_HOME

Richaaaard發表於2015-12-03

Mac OS 上設定 JAVA_HOME


原文連結:http://han.guokai.blog.163.com/blog/static/136718271201301183938165/

由於需要,前幾天在 OS X 上安裝了 Oracle 的 Java 7。安裝之後,發現由於我原來設定的 JAVA_HOME 為 /Library/Java/Home ,導致我使用的還是原來蘋果提供的 Java 6 而不是剛安裝的 Java 7。

網上查了一下,發現網上普遍存在一種不太好的硬編碼方式,比如以下這些:

    JAVA_HOME=/Library/Java/Home

    JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home

    JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home

//上面的幾個目錄其實是等價的連結關係,都指向的是蘋果提供的 Java 6

/System/Library/Frameworks/JavaVM.framework/Versions/ 下有多個不同版本的目錄,但它們連結的都是 CurrentJDK 目錄。總之,這些Java都是蘋果提供的Java,Oracle 或 OpenJDK 提供的 Java 不在此目錄中。

因為不同的 Java 版本和不同的 Java 實現可能安裝在了不同的目錄下,所以使用硬編碼的目錄會有如下缺點:
安裝或升級新的 Java 後需要重新設定 JAVA_HOME(尤其是帶版本號的目錄)
無法適應不同的 Java 實現(Apple和Oracle的)

一點歷史

過去 Mac 上的 Java 都是由 Apple 自己提供的,只支援到 Java 6,並且OS X 10.7 開始系統並不自帶(而是可選安裝)。後來 Apple 加入 OpenJDK 繼續支援 Java 6,而 Java 7 將由 Oracle 負責提供。

根據蘋果的官方說明

Mac OS X 10.5 及以後的版本應該使用 /usr/libexec/java_home 命令來確定 JAVA_HOME ,而在此之前的版本由於沒有這個命令,則應該使用固定的 /Library/Java/Home 目錄。

最佳方式是

    export JAVA_HOME=`/usr/libexec/java_home`

另外,你還可以這樣用,來選擇不同的Java版本:

    export JAVA_HOME=`/usr/libexec/java_home -v 1.6`
    or
    export JAVA_HOME=`/usr/libexec/java_home -v 1.7`

我安裝完 Oracle Java 7後

  • java_home 命令的各種輸出結果是:
    預設或指定1.7的輸出:

      /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home
  • /usr/libexec/java_home -v 1.6 的輸出:

      /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

一些補充說明

Java 7 需要 Mac OS X 10.7.3 (Lion) 及以上版本才能安裝。
在瀏覽器中執行Java要求是64位瀏覽器,所以不支援Chrome, Safari 或 Firefox 沒問題。

更多內容

比如“如何解除安裝”、“解除安裝 Oracle Java 7 後如何還原 Apple Java 6”等,請參考下面這些參考資料:

相關文章