如何在一台计算机上安装多个 JDK 版本
前言
对于使用 Java 语言开发的朋友可能会遇到这种情况,有时想学习和探索 Java 的最新版本提供的一些新特性,比如 Java 11,但你无法将其安装在自己的计算机上,因为你的团队正在使用比这个旧的版本(我们目前用的 Java 8),你并不想影响目前的项目。或者你目前是在维护和开发多个项目,而这些不同的项目使用的 JDK 版本不一样,比如那些维护的老项目使用的是 JDK 8,而新项目你打算使用比较新的版本 JDK 11,以上这些情况都需要在计算机上安装多个 JDK,并且应该能够在多个版本之间方便快速的切换。今天要介绍的主角 SDKMAN 可以很好的解决上面这种问题,它提供了在同一台计算机上对多个版本的开发工具包管理。需要注意的是:这个工具只适用于类 Unix 的系统(比如:Mac OSX、Linux、Cygwin、Solaris、FreeBSD 等)。
SDKMan 简介
直接引用 SDKMan 官网上的介绍如下:
SDKMAN! is a tool for managing parallel versions of multiple Software Development Kits on most Unix based systems. It provides a convenient Command Line Interface (CLI) and API for installing, switching, removing and listing Candidates.
简单来说就是其提供了管理多个版本开发工具包的能力,同时也提供了一些命令行接口让我们方便安装、版本切换、版本移除和显示版本列表。关于 SDKMan 还有几个要点如下:
- SDKMan 是由开源社区开发的,免费使用,。
- SDKMan 是用 bash 编写的,它只需要您的系统上安装了 curl 和 zip / unzip 命令即可。
- SDKMan 可以为 JVM 安装大约 29 个软件开发包,比如 Java、Groovy、Scala、Kotlin、Gradle、Maven、Spark、Spring Boot 等。
- SDKMan 可以自动处理帮我们配置 *_HOME(e.g.:JAVA_HOME) 和 PATH 环境变量,因此我们不需要担心切换版本后这些环境变量的设置。
安装 SDKMan
SDKMan 可以运行在任何类 Unix 系统上,我们只需要在命令行输入以下命令即可安装:
curl -s "https://get.sdkman.io" | bash
然后执行以下命令,加载文件 sdkman-init.sh 到当前环境,执行完该命令之后我们可以通过 sdk version 来验证是否安装成功,同时还可以通过 sdk help 命令显示有关 sdk 命令用法和帮助(PS: 对于使用 Windows 环境的朋友可以安装 Cygwin 或 Git Bash 运行以上命令)。
source "$HOME/.sdkman/bin/sdkman-init.sh"
使用 SDKMan 安装 JDK
前面已经介绍过,SDKMan 支持多达大约 29 个软件开发包管理,我们也可以使用 sdk list 命令来查看支持的完整列表,本文主要介绍 Java 相关的内容,可以通过命令 sdk list java 来查看支持安装的 Java 版本。
使用以下命令安装 Java 11 :
sdk install java 11.0.7.hs-adpt
该命令会花费一些时间,因为它会在我们的计算机上下载对应版本的 JDK,执行完成之后 SDKman 会自动给我们配置好 JAVA_HOME 和 PATH 等环境变量,可以通过 Java -version 命令验证。
现在,如果检查 Java 版本和 JAVA_HOME 环境变量,可以看到当前 Java 的版本已更新为 11.0.7。
可以使用以下命令来设置默认使用的 JDK 版本。
sdk default java 11.0.7.hs-adpt
将 SDKMan 指向已安装 Java 版本
如果在你安装 SDKMan 之前本地电脑已经安装了 JDK 版本,默认是无法识别到的,那么你需要进行以下配置才能让 SDKMan 识别已安装的版本,首先,第一步你要先找到你的 Java 安装目录,我本地 Mac 的安装目录是 /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk,然后使用命令 ln -s 来为 Java 安装目录建立符号链接。
多个 JDK 版本切换示例
SDKMan 提供了命令 sdk use java <version_want_to_use> 在多个版本之间进行切换,使用 sdk use java jdk1.8.0_181.jdk 命令来使用之前本地安装的 Java 8。
使用命令 sdk use java 11.0.7.hs-adpt 来设置版本为 Java 11。
需要注意的是:使用命令 sdk use java 只在当前会话有效,如果你关闭终端并再次打开它,则将使用以前安装的版本,不会改变你本地使用的版本,此时可以使用 sdk default java 来设置永久生效。
如何卸载指定的 JDK 版本
如果你想要卸载任何已安装的 JDK 版本,比如: 11.0.7.hs-adpt,可以使用以下命令卸载:
sdk uninstall java 11.0.7.hs-adpt
此时,如果你想再次安装之前通过 SDKMan 卸载的版本,此时不会再次重新下载,会提示 Found a previously downloaded java 11.0.7.hs-adpt archive. Not downloading it again...,因为之前删除操作并没有真正的从你计算机上删除源压缩包文件。
IntelliJ IDEA 使用 SDMan 安装 JDK
SDKMan 所有安装的 JDK 都放在目录 .sdkman/candidates/java/,你可以在你当前用户的 home 文件夹下面看到该文件夹(注意是隐藏文件夹)。
在 IntelliJ IDEA 中打开任何一个 Java 项目后,您可以按 Command + : 快捷键打开项目结构窗口,在 Project SDK 模块选择新建一个 JDK 后输入你需要的 JDK 版本在 SDKMan 中的路径即可。
因为 .sdkman 是隐藏文件夹不太方便查找,可以使用以下命令创建一个非隐藏文件夹指向它。
ln -s ~/.sdkman ~/sdkman
如何在一台计算机上安装多个 JDK 版本的更多相关文章
- 如何在一台计算机上配置多个jdk【转】
分析问题 为了多快好省的解决当前的问题,我的想法是在windows中同时安装jdk1.6和jdk1.8,在中间进行切换,而不需要多次进行重复的安装和卸载,这样简单方便. 解决思路 第一步:在安装之前, ...
- 在一台计算机上运行两个或多个tomcat
有的时候我们需要在一台计算计算机上安装多个Tomcat,那我们该怎样配置呢? ## 1.配置思路: 在操作之前我们先启动一个Tomcat,看一下启动数据: 这里面有我们在环境变量中配置的CATALI ...
- Windows无法完成安装,若要在此计算机上安装Windows,请中心启动安装。
现在安装系统已经很简单了,我觉得U盘启动的话两步就差不多了, 壹:设置BIOS,将U盘启动作为系统默认启动选项 贰:直接进去大白菜之类的,一键安装... 今天终于看到第三部了, 报错:Windows无 ...
- 这台计算机上缺少此项目引用的 NuGet 程序包-缺少的文件是 ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props
异常处理汇总-开发工具 http://www.cnblogs.com/dunitian/p/4522988.html 协助开发里面总有几个是极简爱好者,但是呢删了不该删的就会影响项目开发,下面看下完 ...
- 【解决】若要使用报表生成器,必须在此计算机上安装 .Net Framework 3.5
在报表库中试图通过点击菜单“在报表生成器中编辑”编辑报表时,会跳转到错误信息页面,提示: 若要使用报表生成器,必须在此计算机上安装 .Net Framework 3.5. 一般情况下并不是因为没有安装 ...
- 安装了SQL2005再安装SQL 2008R2,提示此计算机上安装了 Microsoft Visual Studio 2008 的早期版本和检查是否安装了 SQL Server 2005 Express 工具的解决方案
工作电脑上安装了SQL 2005, 但是客户电脑上安装的是SQL 2008R2,有时候连接他们的库调试没法连接,很不方便.然后又安装了个SQL2008 R2,期间遇到这两个问题,网上搜索了一下收到了解 ...
- 这台计算机上缺少此项目引用的 NuGet 程序包,DotNetCompilerPlatform
严重性 代码 说明 项目 文件 行 禁止显示状态错误 这台计算机上缺少此项目引用的 NuGet 程序包.使用“NuGet 程序包还原”可下载这些程序包.有关更多信息,请参见 http://go.mic ...
- 这台计算机上缺少此项目引用的Nuget程序包,请参考链接 不给出缺什么包的提示。
这台计算机上缺少此项目引用的Nuget程序包,请参考链接 不给出缺什么包的提示. 解决办法: 1.卸载当前解决类库. 2.编辑当前项目类库文件. 3.删除节点 <Target Name=&q ...
- .NET Framework 2.0/3.0/3.5 以 v90 平台工具集为目标。请确保在计算机上安装了 Visual Studio 2008
今天在Visual Studio2010下面开发C++应用的时候发现“.NET Framework 2.0/3.0/3.5 以 v90 平台工具集为目标.请确保在计算机上安装了 Visual Stud ...
随机推荐
- 三步教你如何在Github部署自己的简历
相信铁子们有很多都是将找工作的小白(和小编一样!!嘿嘿)小编也和在座的大家一样,一个普通的不能再普通的二本学生(北华大学) < 单身!单身!单身!> 听很多人都说:像我们这个样子,害!放 ...
- jquery动态live绑定toggle事件
$(".btn").live("click",function(){ $(this).toggle( function () { //事件 1 console. ...
- .NetCore对接各大财务软件凭证API——金蝶系列(1)
哈喽,又和大家见面了,虽然看文章的小伙伴不多,但是我相信总有一天,自己写的这些文章或多或少会对其他人有些帮助,让他们在相关的业务开发下能少走些弯路,那我的目的就达到了,好了,今天就正式开始我们的系列了 ...
- 小程序里json字符串转json对象需注意的地方
一.JSON字符串转换为JSON对象 要使用上面的str1,必须使用下面的方法先转化为JSON对象: //由JSON字符串转换为JSON对象 var obj = eval('(' + str + ') ...
- qt tableview 选择模式
QAbstractItemView::SingleSelection QAbstractItemView::ContiguousSelection QAbstractItemView::Extende ...
- 素数&欧拉函数
素数表 const int maxN找[1,maxN)内的素数 int prime[int I]第I个素数 const int maxN=1e5+5; int prime[maxN]; bool ma ...
- WebRTC 及点对点网络通信机制
原文请查阅这里,略有删减,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 这是 JavaScript 工作原理第十八章. 概述 何为 WebRTC ?首先,字面上已经给出了关于 ...
- mac OS 安装淘宝npm镜像
淘宝npm镜像官网 https://npm.taobao.org/ 在终端输入 npm install -g cnpm --registry=https://registry.npm.taobao.o ...
- Spark学习笔记(一)
概念: Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架. 支持用scala.java和Python等语言编写应用程序.相较于Hdoop,往往有更好的运行效率. Spark包括了 ...
- INTERVIEW #1
一.数据对齐存储 在32位系统中:int占4Bytes,short占2Bytes,char占1Byte,加起来应该是7Bytes,但是下面这段代码输出却是8. #define _CRT_SECURE_ ...