1. 程式人生 > >如何在同一臺機器上安裝多個版本的Java

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

開發十年,就只剩下這套架構體系了! >>>   

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

不久前,我寫了一篇文章,Java Lambda表示式說明。對於我來說,使用Java 8探索這個概念很容易,因為它已經安裝在我的專案中。但是在我目前的專案中,我們仍然使用Java 8,現在,我想升級並學習Java 11。然而,不幸的是,我無法安裝它。

很多Java開發人員都有這種情況。有時候,您想學習和探索Java的最新版本,例如Java 11,但是您不能在自己的機器上安裝它,因為您和您的團隊正在使用一個較老的版本,例如Java 8,並且您不想破壞您的專案。

或者,假設您正在處理多個專案,其中一些專案使用Java 8,另一些新專案使用Java 11。因此,為了並行處理這些專案,您需要在您的機器上安裝多個jdk,並能夠在它們之間進行切換。

如果有一種方法,如果您能夠安裝多個版本的Java並根據需要關閉和開啟它們,又會怎樣呢?

有一個工具叫SDKMan,它允許我們這樣做。官方網站這樣描述:

"SDKMan 是一個工具,用於在大多數基於Unix的系統上管理多個軟體開發工具包的並行版本。它提供了一個方便的命令列介面(CLI)和API,用於安裝、切換、刪除和列出候選項。”

使用SDKMan的一些要點如下:

  1. SDKMan是使用bash編寫的。它要求
    curl
    zip/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,我們可以使用以下命令安裝它。

只需開啟終端並輸入:

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