不久前,我寫了一篇文章,Java Lambda表達式說明。對於我來講,使用Java 8探索這個概念很容易,由於它已經安裝在個人項目中。可是在我目前的項目中,咱們仍然使用Java 8,如今,我想升級並學習Java 11。然而,不幸的是,我沒法安裝它。html
不少Java開發人員都有這種狀況。有時候,您想學習和探索Java的最新版本,例如Java 11,可是您不能在本身的機器上安裝它,由於您和您的團隊正在使用一個較老的版本,例如Java 8,而且您不想破壞您的項目。java
或者,假設您正在處理多個項目,其中一些項目使用Java 8,另外一些新項目使用Java 11。所以,爲了並行處理這些項目,您須要在您的機器上安裝多個jdk,並可以在它們之間進行切換。git
若是有一種方法,若是您可以安裝多個版本的Java並根據須要關閉和打開它們,又會怎樣呢?github
有一個工具叫SDKMan,它容許咱們這樣作。官方網站這樣描述:shell
"SDKMan 是一個工具,用於在大多數基於Unix的系統上管理多個軟件開發工具包的並行版本。它提供了一個方便的命令行接口(CLI)和API,用於安裝、切換、刪除和列出候選項。」express
使用SDKMan的一些要點以下:bash
SDKMan能夠運行在任何基於unix的平臺上,好比Mac OSX、Linux、Cygwin、Solaris和FreeBSD,咱們可使用如下命令安裝它。oracle
只需打開終端並輸入:curl
$ curl -s "https://get.sdkman.io" | bash $ source "$HOME/.sdkman/bin/sdkman-init.sh"
咱們可使用sdk version
驗證安裝,「 sdk help
命令將容許咱們完成關於sdk
命令使用的幫助。工具
Beacsue SDKMan是用bash編寫的,而且只須要curl和zip/unzip在您的系統上。您也能夠在Windows上安裝SDKMan,方法是首先安裝Cygwin或Git Bash for Windows環境,而後運行上面的命令。
SDKMan支持爲JVM安裝29個軟件開發工具包,例如Java、Groovy、Scala、Kotlin、Ceylon、Ant、Gradle、Grails、Maven、Gradle、SBT、Spark和Spring Boot。咱們可使用sdk list
命令得到完整的列表。
命令sdk list java
將給咱們一個java版本列表,咱們可使用SDKMan安裝,以下所示:
$ sdk list java ================================================================================ Available Java Versions ================================================================================ 13.ea.02-open 1.0.0-rc-10-grl 12.ea.26-open 1.0.0-rc-9-grl 11.0.2-zulu 1.0.0-rc-8-grl 11.0.2-open 11.0.1-zulufx 10.0.2-zulu 10.0.2-open 9.0.7-zulu 9.0.4-open 8.0.202-amzn 8.0.201-zulu 8.0.201-oracle 8.0.192-zulufx 7.0.181-zulu 1.0.0-rc-11-grl ================================================================================ + - local version * - installed > - currently in use ================================================================================
如今,假設咱們想安裝OpenJDK版本的Java v9。而後,咱們將在終端中執行下面的命令,該命令還將更新 PATH
和JAVA_HOME
變量:
$ sdk install java 9.0.4-open
該命令將花費一些時間來執行,由於它將下載JDK到咱們機器上,該命令將輸出以下內容:
Downloading: java 9.0.4-open In progress... ######################################################################## 100.0% Repackaging Java 9.0.4-open... Done repackaging... Cleaning up residual files... Installing: java 9.0.4-open Done installing! Setting java 9.0.4-open as default.
如今,若是咱們檢查Java版本和JAVA_HOME,能夠看到Java已經更新到9.0.4
$ java -version openjdk version "9.0.4" OpenJDK Runtime Environment (build 9.0.4+11) OpenJDK 64-Bit Server VM (build 9.0.4+11, mixed mode) $ echo $JAVA_HOME /Users/xbbnrde/.sdkman/candidates/java/current
咱們能夠按照相同的過程來安裝上面列表中看到的任何版本。讓咱們假設要安裝Java V11版本。而後,咱們能夠執行命令:
$ sdk install java 11.0.2-open Downloading: java 11.0.2-open In progress... ######################################################################## 100.0% Repackaging Java 11.0.2-open... Done repackaging... Cleaning up residual files... Installing: java 11.0.2-open Done installing! Do you want java 11.0.2-open to be set as default? (Y/n): Y Setting java 11.0.2-open as default.
如今,若是咱們再次檢查咱們的Java版本和JAVA_HOME,咱們能夠看到Java已經更新到11.0.2:
$ java -version openjdk version "11.0.2" 2019-01-15 OpenJDK Runtime Environment 18.9 (build 11.0.2+9) OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode) $ echo $JAVA_HOME /Users/xbbnrde/.sdkman/candidates/java/current
注意:有時,您須要關閉並從新打開終端才能看到更改。
首先,咱們須要找出您的機器上安裝了Java的位置。在個人機器上,它安裝在文件夾 jdk1.8.0_172.jdk
,它位於文件夾/Library/Java/JavaVirtualMachines
下。讓咱們經過**<java-folder>**來引用這個文件夾。
咱們要作的第二件事是在已安裝的**<java-folder>**和SDKMan之間創建一個符號連接。咱們能夠經過運行如下命令來實現:
$ ln -s /Library/Java/JavaVirtualMachines/<java-folder> ~/.sdkman/candidates/java/<java-folder> $ sudo ln -s /Library/Java/JavaVirtualMachines/<java-folder>/Contents/Home/bin ~/.sdkman/candidates/java/<java-folder>/bin
如今,若是咱們再次執行sdk list java
命令,咱們將獲得:
================================================================================ Available Java Versions ================================================================================ + jdk1.8.0_172.jd 8.0.201-zulu 13.ea.02-open 8.0.201-oracle 12.ea.26-open 8.0.192-zulufx 11.0.2-zulu 7.0.181-zulu > * 11.0.2-open 1.0.0-rc-12-grl 11.0.2.j9-adpt 1.0.0-rc-11-grl 11.0.2.hs-adpt 1.0.0-rc-10-grl 11.0.1-zulufx 1.0.0-rc-9-grl 10.0.2-zulu 1.0.0-rc-8-grl 10.0.2-open 9.0.7-zulu * 9.0.4-open 8.0.202-amzn 8.0.202.j9-adpt 8.0.202.hs-adpt ================================================================================ + - local version * - installed > - currently in use ================================================================================
咱們能夠清楚地看到,咱們的機器上已經安裝了3個JDK,而且JDK 11.0.2-open
目前正在使用。可是,若是咱們想在它們之間切換或者安裝一個新的,咱們能夠經過使用**sdk use java <version_which_you_want_to_use>**就能很是容易地作到這一點,以下所示:
$ sdk use java 9.0.4-open Using java version 9.0.4-open in this shell. $ java -version openjdk version "9.0.4" OpenJDK Runtime Environment (build 9.0.4+11) OpenJDK 64-Bit Server VM (build 9.0.4+11, mixed mode)
$ sdk use java jdk1.8.0_172.jdk Using java version jdk1.8.0_172.jdk in this shell. $ java -version java version "1.8.0_172" Java(TM) SE Runtime Environment (build 1.8.0_172-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
$ sdk use java 11.0.2-open Using java version 11.0.2-open in this shell. $ java -version openjdk version "11.0.2" 2019-01-15 OpenJDK Runtime Environment 18.9 (build 11.0.2+9) OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
使用
sdk use
命令只能使您在執行sdk use
命令的終端shell中使用指定版本的JDK。若是您關閉終端並再次打開它,您將使用先前安裝的版本。
可是若是您想爲全部終端和應用程序激活一個版本的JDK,您可使用命令sdk default java <your_version>:
$ sdk default java 11.0.2-open Default java version set to 11.0.2-open $ java -version openjdk version "11.0.2" 2019-01-15 OpenJDK Runtime Environment 18.9 (build 11.0.2+9) OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
或者,您能夠卸載該版本並從新安裝它,以下所示,這將把該版本設置爲當前JDK。
若是你想卸載任何JDK版本,例如11.0.2-open,你能夠這樣作:
$ sdk uninstall java 11.0.2-open
並且,若是您想再次安裝卸載後的版本,您能夠從新安裝它,並且這一次,SDKMan不會下載它,由於它已經在您的機器上安裝了它(若是您不手動刪除它)。
$ sdk install java 11.0.2-open Found a previously downloaded java 11.0.2-open archive. Not downloading it again... Installing: java 11.0.2-open Done installing! Do you want java 11.0.2-open to be set as default? (Y/n): y Setting java 11.0.2-open as default.
IntelliJ IDEA
中使用一個sdkman安裝的JDKSDKMan 把全部的JDK都安裝在.sdkman/candidates/java/
這個目錄下面, 您能夠在您的主目錄中找到.sdkman
文件夾。
在IntelliJ中打開任何Java項目後,均可以按Command +
打開項目結構窗口。 在該窗口中,您須要單擊New…在Project SDK部分,在那裏,您能夠在瀏覽窗口中輸入.sdkman/candidate/java/
,並從`.sdkman/candidate/java/」中選擇任何JDK。
由於.sdkman
是一個隱藏的文件夾,若是你在尋找它的時候遇到了一些問題,你可使用下面的命令建立一個符號連接到它和一個非隱藏文件夾:
$ ln -s ~/.sdkman ~/sdkman
您能夠在個人GitHub repository上找到本文的完整源代碼,請隨時提供寶貴的反饋!
翻譯: 白石
原文地址: https://dzone.com/articles/how-to-install-multiple-versions-of-java-on-the-sa