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

一段时间以前,我写了一篇文章《 用示例解释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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/342536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网ZigBee3.0协议E18-2G4U04B模块无线数据抓包调试的方法

ZigBee3.0无线抓包简介 ZigBee3.0是ZigBee联盟推出的可以互联互通的标准协议&#xff0c;用之前的Packet Sniffer抓包工具是无法解析ZigBee3.0的数据包&#xff0c;因ZigBee3.0的安全机制所有的数据包都是加密的&#xff0c;无法解析每个数据包含义&#xff0c;所以此抓包方法在…

工业以太网交换机和普通商用交换机的区别

工业交换机宽温工作、抗干扰能力强、防雾、抗震性能强。那么&#xff0c;你知道工业交换机和商用&#xff08;普通&#xff09;交换机的区别吗&#xff1f;接下来飞畅科技就来为大家详细介绍下工业以太网交换机和普通商用交换机的区别&#xff0c;一起来看看吧&#xff01; 工…

基于E18-2G4U04B的ZigBee3.0无线数据抓包安装方法

1.Ubiqua的安装说明 第一步 &#xff1a;解压Ubiqua的安装包&#xff1b; 第二步&#xff1a;选中官方安装文件“UbiquaToolbox_1.4.2244.msi”进行安装&#xff0c;安装过程中选择安装盘直接“下一步”直到安装成功。 第三步&#xff1a;将“Ubiqua.exe”文件复制到安装目录…

[渝粤教育] 中国传媒大学 播音主持创作基础 参考 资料

教育 -播音主持创作基础-章节资料考试资料-中国传媒大学【】 第一章单元作业 第一章单元测试 1、【单选题】播音主持的正确创作道路首先强调创作主体要坚持的播音主持创作原则是&#xff1a; A、客观原则 B、主观原则 C、党性原则 D、艺术原则 参考资料【 】 2、【多选题】下面…

SI4432射频芯片方案物联网无线通信模块数传的典型应用

Si4432是Silicon labs公司的射频芯片&#xff0c;是一款高集成度、低功耗、多频段的EZRadioPRO系列无线收发芯片。其工作电压为1&#xff0e;9&#xff5e;3&#xff0e;6V&#xff0c;可工作在315&#xff0f;433&#xff0f;868&#xff0f;915MHz四个频段&#xff1b;内部集…

工业以太网交换机是否可以组建冗余环网?

工业以太网交换机作为重要的数据通信产品&#xff0c;要保证系统长期稳定、安全的运行&#xff0c;系统必须是开放的&#xff0c;兼容多个厂家的产品&#xff0c;如果仅仅依赖于某一个厂家&#xff0c;风险极大。因此&#xff0c;基于扩展性与兼容性考虑&#xff0c;应当充分考…

[渝粤教育] 中国政法大学 法学方法论 参考 资料

教育 -法学方法论-章节资料考试资料-中国政法大学【】 作业一&#xff1a;法律条文 作业二&#xff1a;法律规范 测验&#xff1a;法律解释 1、【多选题】以下不属于典型的法律解释方法的有&#xff1a; A、发生学解释 B、客观目的解释 C、扩大解释 D、当然解释 参考资料【 】 …

低功耗无线模块超远距离无线传输实现中继的方法

一、无线中继发展背景 近年来&#xff0c;随着社会的发展和科学技术的进步&#xff0c;人们开始进入数字网络化的智能社会&#xff0c;各种各样的智能设备改变着我们的生活&#xff0c;而无线传输在这些智能化发展中占有不可或缺的地位。在无线网络中&#xff0c;实现终端间的…

jdk1.8 ::构造函数_在JDK 8中可通过反射获得构造函数/方法参数元数据

jdk1.8 ::构造函数JDK 8较不广为人知的新 功能之一是在已编译的Java类中包含参数元数据的可选功能[JDK增强建议&#xff08; JEP &#xff09; 118 ]。 此功能允许Java应用程序在运行时通过反射访问此参数元数据信息。 Java教程的Reflection API路径包括一个名为“ 获取方法参…

lora无线通信模块LoRa技术在智能家居灯控上的应用

一、概述 灯在生活中随处可见&#xff0c;传统的灯光一种是每个灯对应着不同的开关&#xff0c;比如&#xff1a;家里的吊灯、壁灯、落地灯、台灯等等&#xff0c;一种是一键式总开关&#xff0c;比如&#xff1a;马路上的路灯&#xff0c;演唱会上的舞台灯&#xff0c;酒店一体…

如何对工业交换机端口进行调试?

随着工业物联网通信时代的到来&#xff0c;工业交换机的应用方面越来越广泛。当工业交换机出现问题时&#xff0c;我们该如何通过工业交换机端口进行快速检测配置是否正确&#xff1f;下面飞畅科技就给大家介绍一种调试方法&#xff1a;交换机环回测试&#xff01; 工业交换机…

[渝粤教育] 中央财经大学 审计学 参考 资料

教育 -审计学-章节资料考试资料-中央财经大学【】 随堂测试题1.1 1、【单选题】注册会计师审计产生的直接原因是( )。 A、所有权和经营权的分离 B、合伙企业制度的产生 C、股份制企业制度的形成 D、资本市场的发展 参考资料【 】 随堂测试1.2 1、【多选题】甲、乙、丙三人成立一…

无线数传模块SI4463、SI4438、SI4432方案无线通信比对

1.基本参数对比 以上图片是成都亿佰特科技有限公司基于SI4463、SI4438和SI4432三款芯片设计的相关产品&#xff0c;上述列表是基于三款产品的测试据。 2.功能简述 SI4432&#xff1a; SI4432是一款高集成度的芯片&#xff0c;减少了外围器件的成本&#xff0c;同时简化了整个…

以太网交换机和普通交换机主要的8大区别介绍

工业以太网交换机和普通交换机都是电&#xff08;光&#xff09;信号转发的网络通信设备&#xff0c;但是它们也有区别&#xff0c;下面飞畅科技就来为大家详细介绍下以太网交换机和普通交换机主要的8大区别&#xff0c;一起来看看吧&#xff01; 太网交换机和普通交换机的区别…

WIFI无线传输模块使用 ESP8266芯片方案接入云平台的方法

1、产品简介 ESP8266 的模块芯片是基于无线通信协议的 UART-WiFi透传模块芯片&#xff0c;支持 802.11b/g/n 的无线标准&#xff0c;并带有三种可选择的工作模式。ESP8266 模块的控制是通过 AT 指令的形式控制&#xff0c;例如选择 WiFi 的应用模式&#xff0c;列出、加入、退出…

[渝粤教育] 保定学院 艺术教育 参考 资料

教育 -艺术教育-章节资料考试资料-保定学院【】 第一单元【单元作业】谈谈科幻艺术的精神家园意义 第一单元【单元测验】 1、【单选题】艺术活动系统由 构成。 A、生活、艺术家、艺术品和创作活动 B、生活、艺术品、欣赏者和欣赏活动 C、艺术家、艺术品、欣赏者和创作、欣赏活动…

LoRa技术实现水表抄表远距离无线传输方案的应用

LoRa是LPWAN通信技术中的一种&#xff0c;是美国Semtech公司采用和推广的一种基于扩频技术的超远距离无线传输方案。这一方案改变了以往关于传输距离与功耗的折衷考虑方式&#xff0c;为用户提供一种简单的能实现远距离、长电池寿命、大容量的系统&#xff0c;进而扩展传感网络…

[渝粤教育] 北京交通大学 大学计算机硬件实验 参考 资料

教育 -大学计算机硬件实验-章节资料考试资料-北京交通大学【】 第一讲测验 1、【单选题】阿兰图灵的图灵机理论模型对后来的计算机产生巨大影响&#xff0c;这篇论文是&#xff1a; A、《论可计算数及其在判定问题中的应用》 B、《存储程序通用电子计算机方案》 C、《继电器和开…

安防工业交换机将成为安防监控系统主要的传输设备

工业交换机即工业以太网交换机&#xff0c;它作用是放到路由器后端&#xff0c;来扩展路由器接口&#xff0c;以解决接口不够用的问题。以太网在设计时&#xff0c;由于其采用载波侦听多路复用冲突检测(CSMA/CD机制)&#xff0c;在复杂的工业环境中应用&#xff0c;其可靠性大大…

[渝粤教育] 北京化工大学 自然辩证法概论 参考 资料

教育 -自然辩证法概论-章节资料考试资料-北京化工大学【】 单选题 1、【单选题】自然辩证法的创始人是谁&#xff1f; A、马克思 B、恩格斯 C、马克思和恩格斯 D、杜林 参考资料【 】 2、【单选题】亚里斯多德认为自然是什么&#xff1f; A、自然就是自然界 B、自然是生成着的事…