前言
系統版本MacOS10,系統安裝的java jdk 是 jdk11,我要安裝
jdk6
jdk7
jdk8
修改系統環境變量,以自如的切換多個版本的 jdk
vi ~/.bash_profile 并填寫下文内容
source ~/.bash_profile // 重新整理環境變量
java -version // 檢視目前的 jdk 版本
# 設定自帶的 jdk1.6
export JAVA_6_HOME=`/usr/libexec/java_home -v 1.6`
# 設定 jdk1.7
export JAVA_7_HOME=`/usr/libexec/java_home -v 1.7`
# 設定 jdk1.8
export JAVA_8_HOME=`/usr/libexec/java_home -v 1.8`
# 預設 jdk 使用1.6版本
export JAVA_HOME=$JAVA_6_HOME
# alias 指令動态切換 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"
每次使用 jdk6、jdk7、jdk8 指令切換 jdk 版本時,都可以輸入 java -version 來檢視是否已經成功。
原理
你安裝 jdk 完成,進入 /Library/Java/JavaVirtualMachines 目錄你會看到相應 jdk 檔案夾的存在。當你安裝了多版本 jdk 時,它們同時存在于這個目錄下。
那麼你使用的 java -version 做了什麼?我們一步一步追蹤
➜ ~ which java // 使用 `which java` 得到 `/usr/bin/java`
/usr/bin/java
➜ ~ ll /usr/bin/java // 使用 `ll /usr/bin/java` 得到 `.../Current/Commands/java`
lrwxr-xr-x 1 root wheel 74B 10 9 17:53 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
➜ ~ cd /System/Library/Frameworks/JavaVM.framework/Versions
➜ Versions ls // 在這裡,有蘋果維護的多個 jdk 版本
1.4 1.5 1.6 A CurrentJDK
1.4.2 1.5.0 1.6.0 Current
➜ Versions pwd
/System/Library/Frameworks/JavaVM.framework/Versions
➜ Versions ll
total 64
lrwxr-xr-x 1 root wheel 10B 10 9 17:53 1.4 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10B 10 9 17:53 1.4.2 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10B 10 9 17:53 1.5 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10B 10 9 17:53 1.5.0 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10B 10 9 17:53 1.6 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10B 10 9 17:53 1.6.0 -> CurrentJDK
drwxr-xr-x 10 root wheel 340B 10 9 17:53 A
lrwxr-xr-x 1 root wheel 1B 10 9 17:53 Current -> A
lrwxr-xr-x 1 root wheel 52B 10 9 17:53 CurrentJDK -> /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
可見蘋果公司在開發 macOS 時已經内置了 jdk 版本管理的功能。它也提供了相應的 command line 工具。使用 /usr/libexec/java_home 即可直接檢視目前的 $JAVA_HOME
➜ ~ /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home
➜ ~ /usr/libexec/java_home -V
Matching Java Virtual Machines (4):
1.8.0_102, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home
1.7.0_80, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
1.6.0_65-b14-468, x86_64: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home
➜ ~ /usr/libexec/java_home -v 1.6
/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
➜ ~ /usr/libexec/java_home -v 1.7
/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
➜ ~ /usr/libexec/java_home -v 1.8
/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home
是以,我們在 .bash_profile 檔案中加入 $JAVA_HOME 的動态設定,就可以自如的切換多個 jdk 版本了
參考
Mac上安裝JDK7
在 Mac OS 上管理多個 jdk 版本