一段时间以前,我写了一篇文章《 用示例解释Java Lambda表达式》,但是我很容易浏览Java 8,因为我在项目中使用了Java 8,并且允许我安装和使用它。 但是在我当前的项目中,我们仍在使用Java 8,现在我想升级自己并学习Java 11,但无法安装它。

许多Java开发人员都会遇到这种情况,有时您想学习和探索Java的最新版本(例如Java 11),但是由于您和您的团队正在使用某些旧版本(例如Java 8)而无法将其安装在计算机上。不想破坏您的项目。

或者假设您正在处理多个项目,其中一些使用Java 8,而一些新项目使用Java11。因此,为了并行处理这些项目,您将需要在计算机上安装多个JDK,并且应该能够切换它们之间。

如果有办法,该怎么办?如果能够安装多个版本的Java,然后根据需要关闭然后再打开它们,该怎么办?

嗯,有一个名为SDKMan的工具,它可以让我们按照官方网站进行操作:


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

关于SDKMan的一些要点如下:

  1. SDKMan是免费使用的,由开源社区开发。
  2. SDKMan是用bash编写的,它只需要curl和zip / unzip程序就可以出现在您的系统上。
  3. SDKMan可以为JVM安装大约29个软件开发套件,例如Java,Groovy,Scala,Kotlin和Ceylon。 蚂蚁,摇篮,Grails,Maven,SBT,Spark,Spring Boot,Vert.x。
  4. 我们不需要担心设置_HOMEPATH环境变量,因为SDKMan会自动处理它。

安装SDKMan

SDKMan可以在任何基于UNIX的平台上运行,例如Mac OSX,Linux,Cygwin,Solaris和FreeBSD,我们可以使用以下命令进行安装:

只需打开一个新终端并输入:

 $ curl -s " https://get.sdkman.io " | bash | 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 。

命令sdk 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 . default -open as 4 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 ? (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  ================================================================================ 

我们可以清楚地看到我们的机器和JDK上已安装了3个JDK
到目前为止,正在使用11.0.2-open 。 但是,如果我们要在它们之间切换或安装新的,我们可以使用sdk use java <version_which_you_want_to_use>轻松地做到这一点, sdk use java <version_which_you_want_to_use>如下所示:

使用Java 9

 $ sdk use java 9.0 . 4 -open  Using java version 9.0 Using java version . 4 -open in this shell. -open in 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. .0_172.jdk in this shell. 8 .0_172.jdk in 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 Using java version . 2 -open in this shell. -open in 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... -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 ? (Y/n): y  Setting java 11.0 . 2 -open as default . 

使用从IntelliJ IDEA安装的SDMan JDK

SDKMan将所有JDK安装在.sdkman/candidates/java/文件夹下,您可以在主目录中找到.sdkman文件夹。

在IntelliJ中打开任何Java项目后,您可以按Command + :打开项目结构窗口。 在该窗口中,您需要单击
Project SDK部分的New...下,您可以在浏览窗口中输入.sdkman/candidates/java/ ,并且可以从.sdkman/candidates/java/选择任何JDK。

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

 $ ln -s ~/.sdkman ~/sdkman 

您可以在此Github存储库中找到我的文章的完整源代码,请随时提供宝贵的反馈。

翻译自: https://www.javacodegeeks.com/2019/04/how-to-install-multiple-versions-of-java-on-the-same-machine.html

如何在同一台计算机上安装多个Java版本相关推荐

  1. 组装一台计算机 java_如何在同一台计算机上安装多个Java版本

    组装一台计算机 java 一段时间以前,我写了一篇文章< 用示例解释Java Lambda表达式>,但是我很容易浏览Java 8,因为我在项目中使用了Java 8,并且允许我安装和使用它. ...

  2. python多个版本可不可以装在一起_可以在同一台计算机上安装多个Python版本。

    可以在同一台计算机上安装多个Python版本. 答:对 合理膳食的核心问题是 ( ) 答:膳食结构 青天明月来几时?我今停杯一问之.人攀明月不可得,. --李白<把酒问月> 答:月行却与人 ...

  3. 不同平台上安装python的方式是一样的对还是错_不可以在同一台计算机上安装多个不同的Python版本...

    [多选题]食品处于冰点以上时,影响水分活度 A w 的因素有( ). [单选题]不属于蛋白质起泡的必要条件的是() [多选题]蛋白质变性后,可能出现的变化() [单选题]腐竹的加工应用的是蛋白质的哪种 ...

  4. 是否同一棵二叉搜索树_如何在同一台计算机上安装Java的多个版本

    是否同一棵二叉搜索树 一段时间以前,我写了一篇文章< 用示例解释Java Lambda表达式>,但是我很容易浏览Java 8,因为我在项目中使用了Java 8,并且允许我安装和使用它. 但 ...

  5. 计算机上安装了更新ie版本,电脑XP系统安装不了ie提示“安装了更新的Internet Explorer版本”的解决方法...

    其实IE是一款功能非常强大的浏览器,其具有非常强大的用户群体.不过,最近有用户在xp系统电脑上安装Internet Exployer浏览器时,遇到提示"安装程序无法继续,因为你的计算机上安装 ...

  6. 计算机上安装了更新ie版本,XP系统安装不了ie提示“安装了更新的Internet Explorer版本”的原因及解决办法...

    IE是一款功能非常强大的浏览器,其具有非常强大的用户群体.不过,最近有用户在xp系统电脑上安装Internet Exployer浏览器时,遇到提示ldquo;安装程序无法继续,因为你的计算机上安装了更 ...

  7. 安装SqlServer2008时,出现:此计算机上安装了Microsoftstudio2008早期版本解决办法

    在安装SqlServer2008版本时,提示错误:此计算机上安装了Microsoft visual studio 2008 的早期版本.请在安装SQL server 2008 前将VS2008升级到S ...

  8. 一个电脑可以装两个java么,是否可以在一台计算机上安装多个Eclipse?

    Is it possible to have multiple Eclipse installs on one computer? To make myself more clear, does Ec ...

  9. 检测有人在用该台计算机怎么处理,我尝试在新计算机上注册IDM,但它显示有关在另一台计算机上使用它的警告消息。我该怎么办?...

    我可以在同一台计算机上的多台计算机或操作系统上使用相同的许可证注册IDM吗? 我需要在另一台计算机上移动我的注册IDM.我该怎么办? 我尝试在新计算机上注册IDM,但它显示有关在另一台计算机上使用它的 ...

最新文章

  1. boos里的AHCI RAID_安徒恩Raid删除,安徒恩讨伐战上线,详细攻略快速看,成为新的摸金圣地...
  2. 231. Power of Two
  3. Matlab 整数线性规划问题模型代码
  4. 实验吧——SQL注入 Write up(一)
  5. 找出两列数据的差集_excel快速查找数据差异项
  6. 五年了,别再把务虚会开 “虚” 了
  7. camel.js_Camel 2.11 –没有Spring的Camel Web应用程序
  8. C# 声明方法关键字
  9. 《机器学习训练秘籍》中文版58章节 完整开源 吴恩达
  10. Matlab 中prod函数的使用
  11. Python常用的字符串操作
  12. 16进制转换成rgba方法
  13. java 里大于且小于_java-浮点数大于或小于零
  14. 求矩阵的特征值和特征向量方法
  15. quoted string not properly terminated错误提示
  16. 微信 Android 视频编码爬过的那些坑
  17. “如何实现高效的应用交付”鲁班会开发者训练营厦门站进行时
  18. 【2011.10.29模拟】24点游戏题解
  19. 力扣-167题 两数之和 II - 输入有序数组(C++)- 双指针
  20. 浅谈ERP系统实施后如何完善企业内部控制制度建设

热门文章

  1. codeforces1451 C. String Equality
  2. 【区间DP】甲虫(luogu 4870)
  3. 【结论】Number(jzoj(gz) 1781)
  4. [集训队作业2018] 万圣节的积木(李超线段树)
  5. 汇编语言(二十九)之数值的二进制和十进制
  6. JavaFX图表(七)之散点图
  7. 一文搞懂 Java 线程中断
  8. 秒杀系统设计的 5 个要点:前端三板斧+后端两条路
  9. [初级]Java中的switch对整型、字符型、字符串的具体实现细节
  10. java中的break与continue用法