前言

对于使用 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 还有几个要点如下:

  1. SDKMan 是由开源社区开发的,免费使用,。
  2. SDKMan 是用 bash 编写的,它只需要您的系统上安装了 curl 和 zip / unzip 命令即可。
  3. SDKMan 可以为 JVM 安装大约 29 个软件开发包,比如 Java、Groovy、Scala、Kotlin、Gradle、Maven、Spark、Spring Boot 等。
  4. 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 版本的更多相关文章

  1. 如何在一台计算机上配置多个jdk【转】

    分析问题 为了多快好省的解决当前的问题,我的想法是在windows中同时安装jdk1.6和jdk1.8,在中间进行切换,而不需要多次进行重复的安装和卸载,这样简单方便. 解决思路 第一步:在安装之前, ...

  2. 在一台计算机上运行两个或多个tomcat

    有的时候我们需要在一台计算计算机上安装多个Tomcat,那我们该怎样配置呢?  ## 1.配置思路: 在操作之前我们先启动一个Tomcat,看一下启动数据: 这里面有我们在环境变量中配置的CATALI ...

  3. Windows无法完成安装,若要在此计算机上安装Windows,请中心启动安装。

    现在安装系统已经很简单了,我觉得U盘启动的话两步就差不多了, 壹:设置BIOS,将U盘启动作为系统默认启动选项 贰:直接进去大白菜之类的,一键安装... 今天终于看到第三部了, 报错:Windows无 ...

  4. 这台计算机上缺少此项目引用的 NuGet 程序包-缺少的文件是 ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props

    异常处理汇总-开发工具  http://www.cnblogs.com/dunitian/p/4522988.html 协助开发里面总有几个是极简爱好者,但是呢删了不该删的就会影响项目开发,下面看下完 ...

  5. 【解决】若要使用报表生成器,必须在此计算机上安装 .Net Framework 3.5

    在报表库中试图通过点击菜单“在报表生成器中编辑”编辑报表时,会跳转到错误信息页面,提示: 若要使用报表生成器,必须在此计算机上安装 .Net Framework 3.5. 一般情况下并不是因为没有安装 ...

  6. 安装了SQL2005再安装SQL 2008R2,提示此计算机上安装了 Microsoft Visual Studio 2008 的早期版本和检查是否安装了 SQL Server 2005 Express 工具的解决方案

    工作电脑上安装了SQL 2005, 但是客户电脑上安装的是SQL 2008R2,有时候连接他们的库调试没法连接,很不方便.然后又安装了个SQL2008 R2,期间遇到这两个问题,网上搜索了一下收到了解 ...

  7. 这台计算机上缺少此项目引用的 NuGet 程序包,DotNetCompilerPlatform

    严重性 代码 说明 项目 文件 行 禁止显示状态错误 这台计算机上缺少此项目引用的 NuGet 程序包.使用“NuGet 程序包还原”可下载这些程序包.有关更多信息,请参见 http://go.mic ...

  8. 这台计算机上缺少此项目引用的Nuget程序包,请参考链接 不给出缺什么包的提示。

    这台计算机上缺少此项目引用的Nuget程序包,请参考链接   不给出缺什么包的提示. 解决办法: 1.卸载当前解决类库. 2.编辑当前项目类库文件. 3.删除节点 <Target Name=&q ...

  9. .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 ...

随机推荐

  1. mysql闪回工具--binlog2sql实践

    DBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要能快速回滚.传统恢复方法是利用备份重搭实例,再应用去除错误sql后的binlog来恢复数据.此法费时费力,甚至需要停机维护 ...

  2. JDK14的新特性

    文章目录 虽然JDK13在今年的9月17号才发布,但是丝毫不会影响到下一个版本JDK14的开发工作.听说官方定的新功能马上就要官宣了,我们这里不妨来提前推断一下. 在9月17号的发布中,Oracle提 ...

  3. SpringCloudAlibaba实战教程系列

    一.简介 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开 ...

  4. 【Linux常见命令】xargs命令

    xargs - build and execute command lines from standard input. 从标准输入< 方向获取数据,再创建和执行命令 xargs 是给命令传递参 ...

  5. nodejs中httpserver的安装和使用

    首先来看一下官方的介绍: 大概意思是说:命令行HTTP服务器工具,用于提供本地文件,类似于python -mSimpleHTTPServe. 直白点的意思就是通过命令行启动的一个http服务器工具,它 ...

  6. embed git commit hash to assembly

    https://stackoverflow.com/a/41200059/3782855 https://github.com/304NotModified/Fody.Stamp

  7. 数据开源工具:Hadoop为企业带来什么?

    熟悉大数据的人一定不会对大名鼎鼎的Hadoop工具陌生,Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.Hadoop的框架最核 ...

  8. 微信Webapp开发的各种变态路由需求及解决办法!

    前言 最近在使用BUI Webapp开发的一个小商城项目在微信上遇到一些坑及变态需求, 层层深入, 整理一下给后来人参考. 一定有你还不知道的! 调试缓存 问题描述: 微信打开的web页面默认是会缓存 ...

  9. 国际站中国区,孟买上Redis 4.0 集群版

    信息摘要: 国际站中国区,孟买上线Redis 4.0 集群版适用客户: 所有用户版本/规格功能: redis 4.0 集群版产品文档: https://www.alibabacloud.com/hel ...

  10. 从零开始搭建口袋妖怪管理系统(4)-借助webpack4.6工程化项目(上)

    "手动是不可能手动的了,这辈子都不可能手动的了." 一.目标 上一章我们借助ngRoute,完成了口袋妖怪SPA系统的多模块导航开发,但是现在引用的东西越来越多,项目文件目录开始变 ...