我的Mac上已經(jīng)有一個(gè)JDK8的版本了,這不JDK13剛發(fā)布(2019-09-17),想快速的嘗一嘗鮮坷剧,就得安裝多個(gè)版本的JDK了。這個(gè)對(duì)Node喊暖、Ruby惫企、Python的使用者來(lái)說(shuō),已經(jīng)不是個(gè)什么新鮮話題了陵叽,但是對(duì)于Java的使用者來(lái)說(shuō)狞尔,似乎沒(méi)有那么多的人受到過(guò)多版本的折磨(我是通過(guò)GitHub上nvm
、rbenv
巩掺、pyenv
偏序、jenv
的Star數(shù)量臆測(cè)出這個(gè)結(jié)論的 :P)。
安裝JDK 13
通過(guò)Homebrew 安裝JDK 13胖替,可以先通過(guò)brew cask info java
查看目前Java的版本:
java: 13,33:5b8a42f3905b406298b72d750b6919f6
https://openjdk.java.net/
Not installed
From: https://github.com/Homebrew/homebrew-cask/blob/master/Casks/java.rb
==> Name
OpenJDK Java Development Kit
==> Artifacts
jdk-13.jdk -> /Library/Java/JavaVirtualMachines/openjdk-13.jdk (Generic Artifact)
這里顯示的是JDK13研儒,正好是我想要安裝的JDK版本,如果不是你想要的版本可以自己搜索相應(yīng)的 Homebrew Tap独令。接下來(lái)直接安裝:
$ brew cask install java
$ java -version
openjdk version "13" 2019-09-17
OpenJDK Runtime Environment (build 13+33)
OpenJDK 64-Bit Server VM (build 13+33, mixed mode, sharing)
這就說(shuō)明JDK13已經(jīng)安裝好了端朵。
但是另一個(gè)問(wèn)題來(lái)了,我電腦上原來(lái)安裝的JDK8去哪呢燃箭?我如何在不同的版本中隨意切換呢逸月?比如像Node的nvm
,Ruby的rvm
遍膜,Python的pyenv
等碗硬。答案是我們可以通過(guò)jenv
來(lái)實(shí)現(xiàn)相同的效果瓤湘。
安裝 jEnv
- 安裝 jEnv
$ brew install jenv
$ exec $SHELL -l
安裝完成之后,然后檢查是否安裝成功恩尾。
$ jenv doctor
[OK] No JAVA_HOME set
[ERROR] Java binary in path is not in the jenv shims.
[ERROR] Please check your path, or try using /path/to/java/home is not a valid path to java installation.
PATH : /usr/local/Cellar/jenv/0.5.2/libexec/libexec:/Users/xxx/.cargo/bin:/Users/xxx/.pyenv/shims:/Users/username/.pyenv:/Users/xxx/.nvm/versions/node/v8.11.4/bin:/Users/xxx/bin:/usr/local/bin:/Users/xxx/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Users/xxx/Documents/Projects/golang/bin
[ERROR] Jenv is not loaded in your zsh
[ERROR] To fix : cat eval "$(jenv init -)" >> /Users/xxx/.zshrc
在這里如果按照提示執(zhí)行cat eval "$(jenv init -)" >> /Users/xxx/.zshrc
:可能會(huì)得到如下錯(cuò)誤:
cat eval "$(jenv init -)" >> /Users/xxx/.zshrc
cat: eval: No such file or directory
cat: export PATH="/Users/xxx/.jenv/shims:${PATH}"
export JENV_SHELL=zsh
export JENV_LOADED=1
unset JAVA_HOME
source '/usr/local/Cellar/jenv/0.5.2/libexec/libexec/../completions/jenv.zsh'
jenv rehash 2>/dev/null
jenv() {
typeset command
command="$1"
if [ "$#" -gt 0 ]; then
shift
fi
case "$command" in
enable-plugin|rehash|shell|shell-options)
eval `jenv "sh-$command" "$@"`;;
*)
command jenv "$command" "$@";;
esac
}: No such file or directory
經(jīng)過(guò)一番搜索弛说,得到如下的解決辦法,主要就是將cat
替換為echo
翰意,這里我已經(jīng)給jEnv提了個(gè)PR木人,以消除這個(gè)干擾。
- Bash用戶
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
- Zsh用戶
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc
$ exec $SHELL -l
然后再次執(zhí)行jenv doctor
冀偶,得到如下信息:
[OK] No JAVA_HOME set
[ERROR] Java binary in path is not in the jenv shims.
[ERROR] Please check your path, or try using /path/to/java/home is not a valid path to java installation.
PATH : /usr/local/Cellar/jenv/0.5.2/libexec/libexec:/Users/xxx/.jenv/shims:/Users/xxx/.cargo/bin:/Users/xxx/.pyenv/shims:/Users/username/.pyenv:/Users/xxx/.cargo/bin:/Users/xxx/.pyenv/shims:/Users/username/.pyenv:/Users/xxx/.nvm/versions/node/v8.11.4/bin:/Users/xxx/bin:/usr/local/bin:/Users/xxx/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Users/xxx/Documents/Projects/golang/bin:/Users/xxx/Documents/Projects/golang/bin
[OK] Jenv is correctly loaded
為了能夠正確的設(shè)置JAVA_HOME
醒第,最好開(kāi)啟export
插件:
$ jenv enable-plugin export
$ exec $SHELL -l
管理不同版本的JDK
添加JDK
添加最新安裝的JDK:
$ jenv add $(/usr/libexec/java_home)
如果/usr/libexec/java_home
所指的位置不是你想要的,也可以手動(dòng)指定目錄:
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/
查看JDK版本
執(zhí)行jenv versions
:
system
* 1.8 (set by JENV_VERSION environment variable)
1.8.0.191
13
openjdk64-13
oracle64-1.8.0.191
默認(rèn)情況下进鸠,system指的是系統(tǒng)中安裝的最新版本的JDK稠曼。
切換JDK版本
- Global
設(shè)置全局模式下的JDK版本:
$ jenv global 13
$ exec $SHELL -l
$ java -version
- Local
在某個(gè)工作目錄下設(shè)置JDK版本,會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè).java-version
的文件:
$ jenv local 1.8
$ exec $SHELL -l
$ java -version
- Shell
設(shè)置當(dāng)前Shell session中的JDK版本:
$ jenv shell 1.8
$ java -version