MAC下安裝多版本JDK和切換幾種方式

環(huán)境:
MAC AIR,OS X 10.10,64位

歷史:
過去 Mac 上的 Java 都是由 Apple 自己提供,只支持到 Java 6,并且OS X 10.7 開始系統(tǒng)并不自帶(而是可選安裝)(原自帶的是1.6)。
后來 Apple 加入 OpenJDK 繼續(xù)支持 Java 6,而 Java 7 將由 Oracle 負(fù)責(zé)提供。

在終端中輸入java -version可查看當(dāng)前JDK版本信息,如果還沒安裝任一JDK,就會(huì)提示安裝,點(diǎn)擊后會(huì)跳到oralce java的下載網(wǎng)頁。

安裝包(注意都是下載mac下的dmg安裝包):
JDK 1.6(驗(yàn)證OS X 10.10可用):http://support.apple.com/kb/DL1572
JDK 1.7&1.8(1.7在頁面下方):http://www.oracle.com/technetwork/java/javase/downloads/index.html

安裝:
dmg安裝包,安裝過程如一般程序,略

最終安裝目錄(版本號(hào)根據(jù)情況略有不同):
JDK 1.6:
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk

JDK 1.7&1.8:
/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk
/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk

推薦方式A:
vi .bash_profile 輸入以下內(nèi)容
然后執(zhí)行source .bash_profile生效新配置

Mac默認(rèn) JDK 6(Mac默認(rèn)自帶了一個(gè)jdk6版本)

export JAVA_6_HOME=/usr/libexec/java_home -v 1.6

設(shè)置 JDK 7

export JAVA_7_HOME=/usr/libexec/java_home -v 1.7

設(shè)置 JDK 8

export JAVA_8_HOME=/usr/libexec/java_home -v 1.8

默認(rèn)JDK 6

export JAVA_HOME=$JAVA_6_HOME

alias命令動(dòng)態(tài)切換JDK版本

alias jdk6="export JAVA_HOME=$JAVA_6_HOME"
alias jdk7="export JAVA_HOME=$JAVA_7_HOME"
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"

默認(rèn)jdk為1.6,執(zhí)行jdk6或jdk7或jdk8后,通過java -version可看到已切換成相應(yīng)版本。

推薦方式B:
1、安裝jenv
執(zhí)行:curl -s get.jenv.io | bash
jenv參考(關(guān)鍵是方便別的java工具管理):https://github.com/linux-china/jenv/wiki/Chinese-Introduction
2、進(jìn)入jenv目錄,然后建相關(guān)目錄:
cd ~/.jenv/candidates/
mkdir java
cd java
mkdir 1.6
mkdir 1.7
mkdir 1.8

3、執(zhí)行以下命令:
ln -s /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.6
ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.7
ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.8

大功告成:
1、最先默認(rèn)的jdk一般是你最后安裝的那jdk。
2、切換版本:jenv use java 1.8
3、設(shè)置缺少版本:jenv default java 1.6

不推薦方式:

區(qū)別在于:此部分是寫死路徑的

export JAVA_6_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
export JAVA_7_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home

默認(rèn)JDK 6

export JAVA_HOME=$JAVA_6_HOME

alias命令動(dòng)態(tài)切換JDK版本

alias jdk6="export JAVA_HOME=$JAVA_6_HOME"
alias jdk7="export JAVA_HOME=$JAVA_7_HOME"
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"

根據(jù)蘋果的官方說明,Mac OS X 10.5 及以后的版本應(yīng)該使用 /usr/libexec/java_home 命令來確定 JAVA_HOME (推薦方式A就是依據(jù)此原理)。
例:
//查看默認(rèn)jdk的安裝路徑
/usr/libexec/java_home

//查看jdk 1.6的安裝路徑
/usr/libexec/java_home -v 1.6

而在此之前的版本由于沒有這個(gè)命令,則應(yīng)該使用固定的 /Library/Java/Home 目錄,也就是直接在環(huán)境變量中寫死。
//下面的幾個(gè)目錄其實(shí)是等價(jià)的鏈接關(guān)系,都指向的是默認(rèn)的JDK。但是硬編碼方式,不推薦。
JAVA_HOME=/Library/Java/Home
JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
因?yàn)椴煌?Java 版本和不同的 Java 實(shí)現(xiàn)可能安裝在了不同的目錄下,所以使用硬編碼的目錄會(huì)有如下缺點(diǎn):
安裝或升級(jí)新的 Java 后需要重新設(shè)置 JAVA_HOME(尤其是帶版本號(hào)的目錄)
無法適應(yīng)不同的 Java 實(shí)現(xiàn)(Apple和Oracle的)
其他分析:
1、打開終端輸入執(zhí)行:which java,顯示/usr/bin/java
2、執(zhí)行cd /usr/bin/,再執(zhí)行l(wèi)s -ll |grep java,可看到j(luò)ava此命令是link到/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
3、執(zhí)行:cd /System/Library/Frameworks/JavaVM.framework/Versions/ 進(jìn)入后,再執(zhí)行l(wèi)s -ll,可看到Current -> A,也就是Current目錄link到A目錄。而A目錄在安裝第一個(gè)JDK時(shí)就存在,用來JDK多版本管理使用的(猜測(cè)是使用到JAVA_HOME)。
另外:
/System/Library/Frameworks/JavaVM.framework/Versions/ 下有多個(gè)不同(低)版本的目錄,但它們鏈接的都是 CurrentJDK 目錄。總之,這些Java都是蘋果提供的Java,Oracle 或 OpenJDK 提供的 Java 不在此目錄中。
據(jù)說以前可在系統(tǒng)設(shè)置中“Java Preferences”對(duì)話框可設(shè)置當(dāng)前jdk,再自動(dòng)調(diào)整A目錄內(nèi)容,但我沒看到過。
Java 7 需要 Mac OS X 10.7.3 (Lion) 及以上版本才能安裝。在瀏覽器中運(yùn)行Java要求是64位瀏覽器,所以不支持Chrome, Safari 或 Firefox 沒問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容