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