Mac上的JDK多版本管理

jEnv

我的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上nvmrbenv巩掺、pyenv偏序、jenv的Star數(shù)量臆測(cè)出這個(gè)結(jié)論的 :P)。

Star

安裝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

  1. 安裝 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

參考鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末客年,一起剝皮案震驚了整個(gè)濱河市霞幅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌量瓜,老刑警劉巖司恳,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異绍傲,居然都是意外死亡扔傅,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門烫饼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)猎塞,“玉大人,你說(shuō)我怎么就攤上這事枫弟⌒舷恚” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵淡诗,是天一觀的道長(zhǎng)骇塘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)韩容,這世上最難降的妖魔是什么款违? 我笑而不...
    開(kāi)封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮群凶,結(jié)果婚禮上插爹,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好赠尾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布力穗。 她就那樣靜靜地躺著,像睡著了一般气嫁。 火紅的嫁衣襯著肌膚如雪当窗。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天寸宵,我揣著相機(jī)與錄音崖面,去河邊找鬼。 笑死梯影,一個(gè)胖子當(dāng)著我的面吹牛巫员,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播甲棍,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼简识,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了救军?” 一聲冷哼從身側(cè)響起财异,我...
    開(kāi)封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤倘零,失蹤者是張志新(化名)和其女友劉穎唱遭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呈驶,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拷泽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袖瞻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片司致。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖聋迎,靈堂內(nèi)的尸體忽然破棺而出脂矫,到底是詐尸還是另有隱情,我是刑警寧澤霉晕,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布庭再,位于F島的核電站,受9級(jí)特大地震影響牺堰,放射性物質(zhì)發(fā)生泄漏拄轻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一伟葫、第九天 我趴在偏房一處隱蔽的房頂上張望恨搓。 院中可真熱鬧,春花似錦、人聲如沸斧抱。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辉浦。三九已至墩邀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盏浙,已是汗流浹背眉睹。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留废膘,地道東北人竹海。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像丐黄,于是被迫代替她去往敵國(guó)和親斋配。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353