前言
近兩年,Java 版本升級頻繁,感受剛剛掌握 Java8,寫本文時,已聽到 java14 的消息,不管是嚐鮮新特性(Java12 中超級香的一個功能),仍是因爲項目升級/兼容須要,咱們可能都要面臨管理多個 Java 版本的情
另外 Oracle 自 Java11 開始,更改了用戶協議,任何商用都會收費。在寫本文時,獲得消息「微軟宣佈加入 OpenJDK」,打不過就選擇 OpenJDK。隨便 G 一下,當個故事瞭解就能夠java
配置單個 Java 環境變量自己沒什麼技術含量可言,但當須要管理多個 Java 版本,重複配置環境變量顯然是很是枯燥的,按照傳統的配置方式咱們又不能靈活的切換 Java 版本git
那要如何輕鬆管理與使用多個版本 Java?github
多版本 Java 管理
顯然咱們不是第一個有這種困境的人,我所知道的現有方案有三種:面試
sdkman 介紹
SDKMAN 是一個用於在大多數基於 Unix 系統上管理 多個軟件開發工具包 (Java, Groovy, Scala, Kotlin and Ceylon. Ant, Gradle 等) 的並行版本的工具 。shell
它提供了一個方便的命令行接口 (CLI) 和 API,用於安裝、切換、刪除和列出候選對象。本文主要經過管理 Java 來講明 sdkman 的使用編程
sdkman 安裝
在類 unix 平臺上安裝 sdkman 很是容易。它能夠順利的安裝在Mac OSX、Linux、WLS、Cygwin、Solaris和FreeBSD 上,同時還支持Bash和 ZSH shell。windows
只需打開一個新終端機並輸入:緩存
$ curl -s "https://get.sdkman.io" | bash
bash
按照相應的指令提示,完成相應的操做後繼續輸入:curl
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
到這裏咱們就能夠驗證 sdk 的安裝版本了:
$ sdk version
上圖紅色框標記顯示我當前 sdkman 的版本,每次執行 sdk version 命令時,都會檢查是否會有新版本,若是要更新輸入 y 就能夠
有些系統發行版本不包含 zip 和 unzip,若是安裝時遇到相關錯誤,能夠輸入以下命令安裝 zip 和 unzip
$ 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
感受上圖按顏色區份內容後,sdkman 的使用說明也就結束了,咱們按照上面的圖來詳細說明一下使用教程
sdk list
先來輸入:
$ sdk list
綠色的標記就是 sdkman 集成的全部可用的 candidate,經過按回車「enter」按鍵,會看到更多可用 candidate
咱們指定 candidate,輸入:
$ sdk list java
從上圖中能夠看到全部 java 可用的版本 version,以及標識 indentifier,以及狀態 status,我已經安裝了 java 12 和 11
有了這些信息作鋪墊,咱們能夠安裝任意 sdkman 內置的軟件開發包了,繼續以 java 爲例
sdk install
回看 sdkman help 命令的輸出,使用 install 命令,咱們再安裝一個 Java 最新 13.0.1.j9 版本
從上圖你能夠看出,綠色標記的內容是 list 命令結果中的 version 值,可是報錯不可用,輸入indentifier 編號才能正常下載,這裏須要注意
安裝完後,status 就會編程 installed 狀態
sdk current
當安裝多個版本的 java 時,咱們輸入下面命令獲取當前正在用 candidate 的版本
$ sdk current java
sdk use
瞭解了當前使用版本,若是咱們想切換到其餘版本, 能夠輸入:
$ sdk use java 12.0.2.j9-adpt
注意: 這裏一樣是指定的 indentifier 的值
sdk default
若是咱們想指定某個版本爲默認版本,能夠輸入:
$ sdk default java jdk1.8.0_162.jdk
注意: 這裏一樣是指定的 indentifier 的值
sdk uninstall
當咱們想卸載某個版本能夠輸入:
$ sdk uninstall java 12.0.2.j9-adpt
注意: 這裏一樣是指定的 indentifier 的值
sdk upgrade
若是咱們想升級某個 candidate,能夠輸入:
$ sdk upgrade java sdk flush
使用 sdkman 時間變長也會慢慢產生不少緩存內容,咱們能夠輸入
清理廣播消息:
$ sdk flush broadcast
清理下載的 sdk 二進制文件(長時間使用後清理,能夠節省出不少空間):
$ sdk flush archives
清理臨時文件內容:
$ sdk flush temp
到這裏 sdkman 的基本使用就已經介紹完了,其實這些命令都不用急,想不起來的時候執行 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 文件刪除掉上面內容便可
到這裏基於 Unix 系統的,有關 sdkman 的安裝,使用及下載都已經介紹完了,能夠上手試一試了,相信不少小夥伴用的是 Windows,除了 jenv, sdkman 和 Jabba 都有 windows 用戶的解決方案:
sdkman windows 解決方案
在 sdkman 官網首頁一樣爲 windows 用戶提供瞭解決方案,小夥伴們找到以下位置查看便可
我看了一下過程,也是很簡單,因爲手頭沒有 windows 電腦,這個請小夥伴們自行嘗試吧,有問題歡迎留言
靈魂追問
tan日拱一兵轉發在看也很贊喜歡做者