Java升級那么快懒棉,多個版本如何靈活切換和管理草描?

近兩年,Java 版本升級頻繁策严,感覺剛剛掌握 Java8穗慕,寫本文時,已聽到 java14 的消息妻导,無論是嘗鮮新特性(<u style="text-decoration: none; border-bottom: 1px dashed grey;">Java12 中 Collectors.teeing 超強功能使用</u>)逛绵,還是由于項目升級/兼容需要,我們可能都要面臨管理多個 Java 版本的情

另外 Oracle 自 Java11 開始栗竖,更改了用戶協(xié)議暑脆,任何商用都會收費。在寫本文時狐肢,得到消息「微軟宣布加入 OpenJDK」添吗,打不過就選擇 OpenJDK。隨便 G 一下份名,當個故事了解就可以

配置單個 Java 環(huán)境變量本身沒什么技術含量可言碟联,但當需要管理多個 Java 版本,重復配置環(huán)境變量顯然是非辰┫伲枯燥的鲤孵,按照傳統(tǒng)的配置方式我們又不能靈活的切換 Java 版本

那要如何輕松管理與使用多個版本 Java?

多版本 Java 管理

顯然我們不是第一個有這種困境的人辰如,我所知道的現(xiàn)有方案有三種:

  1. JABBA
  2. JENV
  3. ADKMAN

本文主要說明如何通過 sdkman 打破我們面臨的困境普监,幫助我們靈活配置與使用 Java

sdkman 介紹

SDKMAN 是一個用于在大多數(shù)基于 Unix 系統(tǒng)上管理 多個軟件開發(fā)工具包 (Java, Groovy, Scala, Kotlin and Ceylon. Ant, Gradle 等) 的并行版本的工具 。

它提供了一個方便的命令行接口 (CLI) 和 API琉兜,用于安裝凯正、切換刪除列出候選對象豌蟋。本文主要通過管理 Java 來說明 sdkman 的使用

sdkman 安裝

在類 unix 平臺上安裝 sdkman 非常容易廊散。它可以順利的安裝在Mac OSX、Linux梧疲、WLS允睹、Cygwin运准、Solaris和FreeBSD 上,同時還支持Bash和 ZSH shell缭受。

只需打開一個新終端機并輸入:

$ curl -s "https://get.sdkman.io" | bash

按照相應的指令提示胁澳,完成相應的操作后繼續(xù)輸入:

$ source "$HOME/.sdkman/bin/sdkman-init.sh"

到這里我們就可以驗證 sdk 的安裝版本了:

$ sdk version
image

上圖紅色框標記顯示我當前 sdkman 的版本,每次執(zhí)行 sdk version 命令時贯涎,都會檢查是否會有新版本听哭,如果要更新輸入 y 就可以

有些系統(tǒng)發(fā)行版本不包含 zipunzip慢洋,如果安裝時遇到相關錯誤塘雳,可以輸入如下命令安裝 zipunzip

$ sudo apt-get install zip unzip

從上面的安裝命令上可以看出,sdkman 默認的安裝路徑是在$HOME/.sdkman 下普筹,我們也可以自定義安裝路徑败明,只需要指定 SDKMAN_DIR 變量值就好了:

$ export SDKMAN_DIR="/usr/local/sdkman" && curl -s "https://get.sdkman.io" | bash

到這里 sdkman 的安裝就結束了,我們來看看如何使用

sdkman 使用教程

命令行下學習一個新玩意當然是查看它的 help 命令太防,輸入:

$ sdkman help
image

感覺上圖按顏色區(qū)分內(nèi)容后妻顶,sdkman 的使用說明也就結束了,我們按照上面的圖來詳細說明一下使用教程

sdk list

先來輸入:

$ sdk list
image

綠色的標記就是 sdkman 集成的所有可用的 candidate蜒车,通過按回車「enter」按鍵讳嘱,會看到更多可用 candidate

我們指定 candidate,輸入:

$ sdk list java
image

從上圖中可以看到所有 java 可用的版本 version酿愧,以及標識 indentifier沥潭,以及狀態(tài) status,我已經(jīng)安裝了 java 12 和 11

有了這些信息做鋪墊嬉挡,我們可以安裝任意 sdkman 內(nèi)置的軟件開發(fā)包了钝鸽,繼續(xù)以 java 為例

sdk install

回看 sdkman help 命令的輸出,使用 install 命令庞钢,我們再安裝一個 Java 最新 13.0.1.j9 版本

image

從上圖你可以看出拔恰,綠色標記的內(nèi)容是 list 命令結果中的 version 值,但是報錯不可用基括,輸入indentifier 編號才能正常下載颜懊,這里需要注意

安裝完后,status 就會編程 installed 狀態(tài)

sdk current

當安裝多個版本的 java 時风皿,我們輸入下面命令獲取當前正在用 candidate 的版本

$ sdk current java
image

sdk use

了解了當前使用版本河爹,如果我們想切換到其他版本, 可以輸入:

$ sdk use java 12.0.2.j9-adpt

注意??: 這里同樣是指定的 indentifier 的值

image

sdk default

如果我們想指定某個版本為默認版本,可以輸入:

$ sdk default java jdk1.8.0_162.jdk

注意??: 這里同樣是指定的 indentifier 的值

image

sdk uninstall

當我們想卸載某個版本可以輸入:

$ sdk uninstall java 12.0.2.j9-adpt

注意??: 這里同樣是指定的 indentifier 的值

sdk upgrade

如果我們想升級某個 candidate揪阶,可以輸入:

$ sdk upgrade java

sdk flush

使用 sdkman 時間變長也會慢慢產(chǎn)生很多緩存內(nèi)容昌抠,我們可以輸入
清理廣播消息:

$ sdk flush broadcast

清理下載的 sdk 二進制文件(長時間使用后清理,可以節(jié)省出很多空間):

$ sdk flush archives

清理臨時文件內(nèi)容:

$ sdk flush temp

到這里 sdkman 的基本使用就已經(jīng)介紹完了鲁僚,其實這些命令都不用急炊苫,想不起來的時候執(zhí)行 sdk help 來臨時查看一下就好

sdkman 卸載

如果我們不喜歡 sdkman 了裁厅,我們也可以輕松的卸載掉它:

$ tar zcvf ~/sdkman-backup_$(date +%F-%kh%M).tar.gz -C ~/ .sdkman
$ rm -rf ~/.sdkman

最后打開你的 .bashrc、.bash_profile 和/或者 .profile侨艾,找到并刪除下面這幾行执虹。

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
[[ -s "/home/dudette/.sdkman/bin/sdkman-init.sh" ]] && source "/home/dudette/.sdkman/bin/sdkman-init.sh"

我用的 zshrc,找到 .zshrc 文件刪除掉上面內(nèi)容即可

到這里基于 Unix 系統(tǒng)的唠梨,有關 sdkman 的安裝袋励,使用及下載都已經(jīng)介紹完了,可以上手試一試了当叭,相信很多小伙伴用的是 Windows茬故,除了 jenv, sdkman 和 Jabba 都有 windows 用戶的解決方案:

sdkman windows 解決方案

在 sdkman 官網(wǎng)首頁同樣為 windows 用戶提供了解決方案蚁鳖,小伙伴們找到如下位置查看即可

image
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末磺芭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子醉箕,更是在濱河造成了極大的恐慌钾腺,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讥裤,死亡現(xiàn)場離奇詭異放棒,居然都是意外死亡,警方通過查閱死者的電腦和手機己英,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門间螟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人剧辐,你說我怎么就攤上這事寒亥。” “怎么了荧关?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵溉奕,是天一觀的道長。 經(jīng)常有香客問我忍啤,道長加勤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任同波,我火速辦了婚禮鳄梅,結果婚禮上,老公的妹妹穿的比我還像新娘未檩。我一直安慰自己戴尸,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布冤狡。 她就那樣靜靜地躺著孙蒙,像睡著了一般项棠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挎峦,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天香追,我揣著相機與錄音,去河邊找鬼坦胶。 笑死透典,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的顿苇。 我是一名探鬼主播罩扇,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼攒霹,長吁一口氣:“原來是場噩夢啊……” “哼惨险!你這毒婦竟也來了搞糕?” 一聲冷哼從身側響起钙皮,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蜂科,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后短条,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體导匣,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年茸时,在試婚紗的時候發(fā)現(xiàn)自己被綠了贡定。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡可都,死狀恐怖缓待,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渠牲,我是刑警寧澤旋炒,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站签杈,受9級特大地震影響瘫镇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜答姥,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一铣除、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹦付,春花似錦尚粘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽互捌。三九已至,卻和暖如春行剂,著一層夾襖步出監(jiān)牢的瞬間秕噪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工厚宰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腌巾,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓铲觉,卻偏偏與公主長得像澈蝙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子撵幽,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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