首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在同一台机器上安装多个版本的Java 顶

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

作者头像
白石
发布于 2019-08-23 02:40:32
发布于 2019-08-23 02:40:32
2.5K00
代码可运行
举报
文章被收录于专栏:白石白石
运行总次数:0
代码可运行

如何在同一台机器上安装多个版本的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编写的。它要求curlzip/unzip已经安装在您的系统中。
  2. SDKMan可以运行在任何基于unix的平台上,例如Mac OSX、Linux、Cygwin、SolarisFreeBSD
  3. SDKMan可以为JVM安装大约29个软件开发工具包,如Java、Groovy、Scala、Kotlin、Ceylon、Ant、Gradle、Grails、Maven、SBT、SparkSpring Boot和Vert.x。
  4. 我们不需要担心设置' HOME '和' PATH '环境变量,因为SDKMan会自动处理它。

安装 SDKMan

SDKMan可以运行在任何基于unix的平台上,比如Mac OSX、Linux、Cygwin、Solaris和FreeBSD,我们可以使用以下命令安装它。

只需打开终端并输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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安装,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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 变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sdk install java 9.0.4-open

该命令将花费一些时间来执行,因为它将下载JDK到我们机器上,该命令将输出如下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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版本。然后,我们可以执行命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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之间建立一个符号链接。我们可以通过运行以下命令来实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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命令,我们将得到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
================================================================================
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
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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>:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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,你可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sdk uninstall java 11.0.2-open

而且,如果您想再次安装卸载后的版本,您可以重新安装它,而且这一次,SDKMan不会下载它,因为它已经在您的机器上安装了它(如果您不手动删除它)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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是一个隐藏的文件夹,如果你在寻找它的时候遇到了一些问题,你可以使用下面的命令创建一个符号链接到它和一个非隐藏文件夹:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ln -s ~/.sdkman ~/sdkman

您可以在我的GitHub repository上找到本文的完整源代码,请随时提供宝贵的反馈!

翻译: 白石

原文地址: https://dzone.com/articles/how-to-install-multiple-versions-of-java-on-the-sa

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MacOS 和 Linux 使用 SDKMAN 管理 Java 工具链
Java 多版本环境的管理,一直是开发过程中容易踩坑的环节。JDK 8、JDK 11、JDK 17、JDK 21,项目环境各不相同,频繁切换 JDK,手动改 JAVA_HOME 太麻烦了。
HandsomeYo
2025/06/20
1860
Elasticsearch 源码学习(1)源码编译调试
首先 fork 一份 [Elasticsearch 项目] (https://github.com/elastic/elasticsearch) 的代码到自己的 github 仓库,这样看代码的时候写注释可以提交到自己的仓库。
Se7en258
2021/10/09
1.3K0
Elasticsearch 源码学习(1)源码编译调试
小宇宙爆发!Spring Boot 新特性:节省95%内存占用!
GraalVM[1] 是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务。最近比较火的 Java 框架 Quarkus[2] 默认支持 GraalVM
macrozheng
2021/01/06
2.2K0
小宇宙爆发!Spring Boot 新特性:节省95%内存占用!
一台机器下,多个Java版本的粗放与精细管理
在软件开发过程中,经常会遇到“古老”的项目,这些项目的JDK还处于Java 6、Java 7甚至更早的版本。同时,在学习新的JDK特性时,往往又需要安装最新版本的JDK。鉴于这些情况,我们就需要在在本机环境中安装多个JDK,并且能够方便的切换。
程序新视界
2022/11/14
1.1K0
我把springboot项目从Java 8 升级 到了Java 17 的过程总结,愿为君提前踩坑!
不过在今年之后,这个情况发生了变化。由于厂商纷纷宣布即将停止 1.8 版本的更新维护:Oracle 于 2019 年 1 月停止商用用途中的更新,2020 年 12 月停止非商用版本更新;AdoptOpenJDK 于 2023 年 9 月或之前停止更新;Amazon Corretto 于 2023 年 6 月或之前停止更新。意味着 23 年 9 月之后,将不再有厂商继续更新 Java 8。
鲲志说
2025/04/07
3270
我把springboot项目从Java 8 升级 到了Java 17 的过程总结,愿为君提前踩坑!
OpenJDK 8 安装
建议配置使用 OpenJDK,不建议使用 Oracle JDK,主要是因为版本问题。 OpenJDK is working, system doesn’t require install Oracle JDK.
HoneyMoose
2021/12/14
2.8K0
OpenJDK 8 安装
Docker 安装搭建 Tomcat + MySQL
注:这里遇到了一个错误【WARNING: IPv4 forwarding is disabled. Networking will not work.】
星哥玩云
2022/07/26
1.1K0
CentOS7安装java11
安装 Java 11 后,建议设置 JAVA_HOME 环境变量,以便系统和其他应用程序能够找到 Java 11。
郑郑SunUp
2025/01/05
2870
Rainbond-Java源码构建自定义JDK版本
Rainbond官方提供了多个版本的OpenJDK供用户使用。这些OpenJDK的安装包托管于好雨科技官方的OSS(对象存储)中。能够接入互联网的Rainbond平台,可以通过rbd-repo组件的代理获取这些资源,而不用人工干预。
Rainbond开源
2019/09/25
1.1K0
Rainbond-Java源码构建自定义JDK版本
Java程序员需要了解的—容器中的JVM资源该如何被安全的限制?
Java与Docker的结合,虽然更好的解决了application的封装问题。但也存在着不兼容,比如Java并不能自动的发现Docker设置的内存限制,CPU限制。
慕容千语
2019/06/13
1.6K0
Java升级那么快,多个版本如何灵活切换和管理?
近两年,Java 版本升级频繁,感觉刚刚掌握 Java8,写本文时,已听到 java14 的消息,无论是尝鲜新特性(Java12 中超级香的一个功能),还是由于项目升级/兼容需要,我们可能都要面临管理多个 Java 版本的情
用户4172423
2019/11/19
1.3K0
Java升级那么快,多个版本如何灵活切换和管理?
命令行一键切换java版本的几种方式
java现在版本发布相对以前比较频繁了,java9还没来得及用,java10就出来了,2018年9月份java11也要来了,于是就有需求在笔记本电脑上装多个版本的java,一键切换就变得极为迫切。
code4it
2018/09/17
1.8K0
CentOS7安装java8和java11,实现版本共存且自由切换
链接:https://pan.baidu.com/s/1LszbdHk31yqIIHjfh_SOlA
郑郑SunUp
2025/01/01
7130
Mac多版本Java切换JDK – Linux切换JDK
但是在Mac中可没有。我们本次计划:配别名的方式实现多JDK版本切换,比如JDK11就是java11 -version,JDK17就是java17 -version
收心
2023/02/22
4.5K0
SDKMAN!
打开~/.bash_profile文件看看cat ~/.bash_profile:
johnny666
2024/09/12
1890
避免容器中运行的Java应用被杀掉
今天测试环境遇到一个问题,一个Java的容器由于OOM频繁被Killed掉。这个问题还经常出现的,这里记录下解决过程。
jeremyxu
2019/11/07
2.2K0
2019 年的软件趋势
解读:又到了一年总结和展望的时候了,看看 Pivotal(Spring)公司带来的2019年软件趋势关键词。
技术从心
2019/08/07
1K0
Java-CentoOS 7安装JDK8 (rpm格式 和 tar.gz格式)& 多JDK设置默认的Java 版本
rpm 类似windows 操作系统上的 exe执行文件, 默认安装到 /usr/java目录下
小小工匠
2021/08/17
6980
如何在 CentOS 8 上安装 Java
Java 有两种不同的实现,OpenJDK 和 Oracle Java。它们大部分都相同,除了 Oracle Java 拥有一些额外的商业特性。Oracle Java License 仅仅允许非商业使用,例如个人使用或者开发者使用。OpenJDK 是 Java 平台的开源实现。
雪梦科技
2020/05/11
6.7K0
如何在 CentOS 8 上安装 Java
OpenJDK和Oracle JDK有什么区别和联系?
《Linux 7安装Oracle 11g打怪经历》的安装过程中,启动图形界面,需要指定jre路径,当时使用yum install jdk安装的,并不能解决问题,查看版本才知道他是OpenJDK,最终使用Oracle JDK,才解决的问题,那OpenJDK和Oracle JDK究竟有什么区别?
bisal
2020/03/13
13.8K1
相关推荐
MacOS 和 Linux 使用 SDKMAN 管理 Java 工具链
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验