如何在同一臺機器上安裝多個版本的Java

如何在同一臺機器上安裝多個版本的Java

不久前,我寫了一篇文章,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

  1. SDKMan是使用bash編寫的。它要求curlzip/unzip已經安裝在您的系統中。
  2. SDKMan能夠運行在任何基於unix的平臺上,例如Mac OSX、Linux、Cygwin、Solaris和FreeBSD。
  3. SDKMan能夠爲JVM安裝大約29個軟件開發工具包,如Java、Groovy、Scala、Kotlin、Ceylon、Ant、Gradle、Grails、Maven、SBT、Spark、Spring Boot和Vert.x。
  4. 咱們不須要擔憂設置' HOME '和' PATH '環境變量,由於SDKMan會自動處理它。

安裝 SDKMan

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編寫的,而且只須要curlzip/unzip在您的系統上。您也能夠在Windows上安裝SDKMan,方法是首先安裝CygwinGit Bash for Windows環境,而後運行上面的命令。

使用SDKMan安裝Java

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。而後,咱們將在終端中執行下面的命令,該命令還將更新 PATHJAVA_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

注意:有時,您須要關閉並從新打開終端才能看到更改。

將SDKMan指向已安裝的現有Java版本

首先,咱們須要找出您的機器上安裝了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>**就能很是容易地作到這一點,以下所示:

使用Java 9

$ 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)

使用本地安裝的Java 8

$ 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)

使用Java 11

$ 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版本

若是你想卸載任何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安裝的JDK

SDKMan 把全部的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

相關文章
相關標籤/搜索