如何在同一台计算机上安装Java的多个版本


Java开发人员经常发生这种情况。有时,您想学习和探索Java的最新版本,但是由于您和您的团队使用的是旧版本(例如Java 8),并且您不想意外中断项目,因此无法将其安装在计算机上。

或者,假设您正在处理多个项目,其中一些使用Java 8,而某些则是使用Java 11的新项目。因此,要在这两个项目上工作,您将需要在Windows上安装多个JDK版本。您的机器,并能够在它们之间进行切换。

如果有一种方法可以安装多个Java版本并根据您的需要打开和关闭不同的版本,该怎么办。

SDKMan!是用于在大多数基于Unix的系统上管理多个S软件开发套件的并行版本的 工具。它提供了方便的命令行界面(CLI)和API,用于安装,切换,删除和列出候选人。 关于SDKMan的一些要点如下:

  1. SDKMan是免费使用的,并由开源社区开发。
  2. SDKMan是用bash编写的,仅要求curl和zip / unzip程序出现在您的系统上。
  3. 我们不需要担心设置_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 命令用法的完整帮助 。

因为SDKMan是用bash编写的, 并且仅要求 curl和 zip / unzip出现在系统上,所以您也可以通过在Windows环境中首先安装Cygwin或 Git Bash然后运行上述命令,在Windows上安装SDKMan 。

使用SDKMan安装Java SDKMan支持为JVM安装29个软件开发套件,例如Java,Groovy,Scala,Kotlin,Ceylon,Grails,SBT,Spark,Spring Boot。我们可以使用sdk list命令获取完整列表 。

SDKMan还可以帮助我们安装构建工具,例如Ant,Maven和Gradle。您可以在Java Build Tools比较中阅读有关这些构建工具的更多信息:Ant vs. Maven vs Gradle

Commandsdk list java 将为我们提供可以使用SDKMan安装的Java版本的列表,如下所示:

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

现在,假设我们要安装Java v9的OpenJDK版本,那么我们将在终端中执行以下命令,该命令还将更新 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

注意:有时,您需要关闭并重新打开终端才能看到所做的更改。 sdkman同时安装并运行多个Java版本Java11和Java-9 ultaneously.png

将SDKMan指向您现有的已安装Java版本 首先,我们需要找出Java在您的计算机上的安装位置。在我的机器上,它安装在该文件夹jdk1.8.0_172.jdk, 下的文件夹中/Library/Java/JavaVirtualMachines;让我们将此文件夹称为

我们要做的第二件事是在已安装的SDKMa和SDKMa之间建立符号链接。我们可以通过运行以下命令来做到这一点:

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

我们可以清楚地看到,我们的计算机上已经安装了三个JDK,并且到目前为止,JDK11.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命令的同一终端外壳中使用指定版本的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/candidates/java/在浏览器窗口,然后从任何JDK .sdkman/candidates/java/

因为它.sdkman是一个隐藏文件夹,并且如果您在找到它时遇到一些问题,则始终可以使用以下命令使用非隐藏文件夹创建指向该文件的符号链接:

$ LN  -s〜/ .sdkman〜/ sdkman


原文链接:http://codingdict.com