如何在一臺計(jì)算機(jī)上安裝多個 JDK 版本

前言

對于使用 Java 語言開發(fā)的朋友可能會遇到這種情況澄港,有時想學(xué)習(xí)和探索 Java 的最新版本提供的一些新特性,比如 Java 11沉帮,但你無法將其安裝在自己的計(jì)算機(jī)上姻氨,因?yàn)槟愕膱F(tuán)隊(duì)正在使用比這個舊的版本(我們目前用的 Java 8),你并不想影響目前的項(xiàng)目缕溉】即或者你目前是在維護(hù)和開發(fā)多個項(xiàng)目,而這些不同的項(xiàng)目使用的 JDK 版本不一樣证鸥,比如那些維護(hù)的老項(xiàng)目使用的是 JDK 8僚楞,而新項(xiàng)目你打算使用比較新的版本 JDK 11,以上這些情況都需要在計(jì)算機(jī)上安裝多個 JDK枉层,并且應(yīng)該能夠在多個版本之間方便快速的切換泉褐。今天要介紹的主角 SDKMAN 可以很好的解決上面這種問題,它提供了在同一臺計(jì)算機(jī)上對多個版本的開發(fā)工具包管理鸟蜡。需要注意的是:這個工具只適用于類 Unix 的系統(tǒng)(比如:Mac OSX膜赃、Linux、Cygwin揉忘、Solaris跳座、FreeBSD 等)端铛。

SDKMan 簡介

直接引用 SDKMan 官網(wǎng)上的介紹如下:

SDKMAN! is a tool for managing parallel versions of multiple Software Development Kits on most Unix based systems. It provides a convenient Command Line Interface (CLI) and API for installing, switching, removing and listing Candidates.

簡單來說就是其提供了管理多個版本開發(fā)工具包的能力,同時也提供了一些命令行接口讓我們方便安裝疲眷、版本切換禾蚕、版本移除和顯示版本列表。關(guān)于 SDKMan 還有幾個要點(diǎn)如下:

  1. SDKMan 是由開源社區(qū)開發(fā)的狂丝,免費(fèi)使用换淆,。
  2. SDKMan 是用 bash 編寫的几颜,它只需要您的系統(tǒng)上安裝了 curlzip / unzip 命令即可倍试。
  3. SDKMan 可以為 JVM 安裝大約 29 個軟件開發(fā)包,比如 Java蛋哭、Groovy易猫、ScalaKotlin具壮、GradleMaven哈蝇、Spark棺妓、Spring Boot 等。
  4. SDKMan 可以自動處理幫我們配置 *_HOME(e.g.:JAVA_HOME)PATH 環(huán)境變量炮赦,因此我們不需要擔(dān)心切換版本后這些環(huán)境變量的設(shè)置怜跑。

安裝 SDKMan

SDKMan 可以運(yùn)行在任何類 Unix 系統(tǒng)上,我們只需要在命令行輸入以下命令即可安裝:

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

然后執(zhí)行以下命令吠勘,加載文件 sdkman-init.sh 到當(dāng)前環(huán)境性芬,執(zhí)行完該命令之后我們可以通過 sdk version 來驗(yàn)證是否安裝成功,同時還可以通過 sdk help 命令顯示有關(guān) sdk 命令用法和幫助(PS: 對于使用 Windows 環(huán)境的朋友可以安裝 Cygwin 或 Git Bash 運(yùn)行以上命令)剧防。

source "$HOME/.sdkman/bin/sdkman-init.sh"
verify-sdkman-install.png

使用 SDKMan 安裝 JDK

前面已經(jīng)介紹過植锉,SDKMan 支持多達(dá)大約 29 個軟件開發(fā)包管理,我們也可以使用 sdk list 命令來查看支持的完整列表峭拘,本文主要介紹 Java 相關(guān)的內(nèi)容俊庇,可以通過命令 sdk list java 來查看支持安裝的 Java 版本。

sdk-list-java.png

使用以下命令安裝 Java 11

sdk install java 11.0.7.hs-adpt

該命令會花費(fèi)一些時間鸡挠,因?yàn)樗鼤谖覀兊挠?jì)算機(jī)上下載對應(yīng)版本的 JDK辉饱,執(zhí)行完成之后 SDKman 會自動給我們配置好 JAVA_HOMEPATH 等環(huán)境變量,可以通過 Java -version 命令驗(yàn)證拣展。

sdk-install-jdk-11

現(xiàn)在彭沼,如果檢查 Java 版本和 JAVA_HOME 環(huán)境變量,可以看到當(dāng)前 Java 的版本已更新為 11.0.7备埃。

java-version-verify

可以使用以下命令來設(shè)置默認(rèn)使用的 JDK 版本姓惑。

sdk default java 11.0.7.hs-adpt

將 SDKMan 指向已安裝 Java 版本

如果在你安裝 SDKMan 之前本地電腦已經(jīng)安裝了 JDK 版本褐奴,默認(rèn)是無法識別到的,那么你需要進(jìn)行以下配置才能讓 SDKMan 識別已安裝的版本挺益,首先歉糜,第一步你要先找到你的 Java 安裝目錄,我本地 Mac 的安裝目錄是 /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk望众,然后使用命令 ln -s 來為 Java 安裝目錄建立符號鏈接匪补。

point-sdkman-existing-installd-version.png

多個 JDK 版本切換示例

SDKMan 提供了命令 sdk use java <version_want_to_use> 在多個版本之間進(jìn)行切換,使用 sdk use java jdk1.8.0_181.jdk 命令來使用之前本地安裝的 Java 8烂翰。

sdk-use-jdk8.png

使用命令 sdk use java 11.0.7.hs-adpt 來設(shè)置版本為 Java 11夯缺。

sdk-use-java11

需要注意的是:使用命令 sdk use java <version> 只在當(dāng)前會話有效,如果你關(guān)閉終端并再次打開它甘耿,則將使用以前安裝的版本踊兜,不會改變你本地使用的版本,此時可以使用 sdk default java <version> 來設(shè)置永久生效佳恬。

如何卸載指定的 JDK 版本

如果你想要卸載任何已安裝的 JDK 版本捏境,比如: 11.0.7.hs-adpt,可以使用以下命令卸載:

sdk uninstall java 11.0.7.hs-adpt

此時毁葱,如果你想再次安裝之前通過 SDKMan 卸載的版本垫言,此時不會再次重新下載,會提示 Found a previously downloaded java 11.0.7.hs-adpt archive. Not downloading it again...倾剿,因?yàn)橹皠h除操作并沒有真正的從你計(jì)算機(jī)上刪除源壓縮包文件筷频。

IntelliJ IDEA 使用 SDMan 安裝 JDK

SDKMan 所有安裝的 JDK 都放在目錄 .sdkman/candidates/java/,你可以在你當(dāng)前用戶的 home 文件夾下面看到該文件夾(注意是隱藏文件夾)前痘。

show-sdkman-directory.png

IntelliJ IDEA 中打開任何一個 Java 項(xiàng)目后凛捏,您可以按 Command + : 快捷鍵打開項(xiàng)目結(jié)構(gòu)窗口,在 Project SDK 模塊選擇新建一個 JDK 后輸入你需要的 JDK 版本在 SDKMan 中的路徑即可芹缔。

idea-set-jdk-version.png

因?yàn)?.sdkman 是隱藏文件夾不太方便查找坯癣,可以使用以下命令創(chuàng)建一個非隱藏文件夾指向它。

ln -s ~/.sdkman ~/sdkman
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乖菱,一起剝皮案震驚了整個濱河市坡锡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窒所,老刑警劉巖鹉勒,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吵取,居然都是意外死亡禽额,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脯倒,“玉大人实辑,你說我怎么就攤上這事≡宥” “怎么了剪撬?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悠反。 經(jīng)常有香客問我残黑,道長,這世上最難降的妖魔是什么斋否? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任梨水,我火速辦了婚禮,結(jié)果婚禮上茵臭,老公的妹妹穿的比我還像新娘疫诽。我一直安慰自己,他們只是感情好旦委,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布奇徒。 她就那樣靜靜地躺著,像睡著了一般缨硝。 火紅的嫁衣襯著肌膚如雪逼龟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天追葡,我揣著相機(jī)與錄音,去河邊找鬼奕短。 笑死宜肉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的翎碑。 我是一名探鬼主播谬返,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼日杈!你這毒婦竟也來了遣铝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤莉擒,失蹤者是張志新(化名)和其女友劉穎酿炸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涨冀,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡填硕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扁眯。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡壮莹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姻檀,到底是詐尸還是另有隱情命满,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布绣版,位于F島的核電站胶台,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏僵娃。R本人自食惡果不足惜概作,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望默怨。 院中可真熱鬧讯榕,春花似錦、人聲如沸匙睹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痕檬。三九已至霎槐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間梦谜,已是汗流浹背丘跌。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留唁桩,地道東北人闭树。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像荒澡,于是被迫代替她去往敵國和親报辱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345