对于使用 Java
语言开发的朋友可能会遇到这种情况,有时想学习和探索 Java
的最新版本提供的一些新特性,比如 Java 11
,但你无法将其安装在自己的计算机上,因为你的团队正在使用比这个旧的版本(我们目前用的 Java 8
),你并不想影响目前的项目。或者你目前是在维护和开发多个项目,而这些不同的项目使用的 JDK
版本不一样,比如那些维护的老项目使用的是 JDK 8
,而新项目你打算使用比较新的版本 JDK 11
,以上这些情况都需要在计算机上安装多个 JDK
,并且应该能够在多个版本之间方便快速的切换。今天要介绍的主角 SDKMAN 可以很好的解决上面这种问题,它提供了在同一台计算机上对多个版本的开发工具包管理。需要注意的是:这个工具只适用于类 Unix
的系统(比如:Mac OSX、Linux、Cygwin、Solaris、FreeBSD 等)。
直接引用 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
可以运行在任何类 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
支持多达大约 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
之前本地电脑已经安装了 JDK
版本,默认是无法识别到的,那么你需要进行以下配置才能让 SDKMan
识别已安装的版本,首先,第一步你要先找到你的 Java
安装目录,我本地 Mac
的安装目录是 /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk
,然后使用命令 ln -s
来为 Java
安装目录建立符号链接。
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 <version>
只在当前会话有效,如果你关闭终端并再次打开它,则将使用以前安装的版本,不会改变你本地使用的版本,此时可以使用 sdk default java <version>
来设置永久生效。
如果你想要卸载任何已安装的 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...
,因为之前删除操作并没有真正的从你计算机上删除源压缩包文件。
SDKMan
所有安装的 JDK
都放在目录 .sdkman/candidates/java/
,你可以在你当前用户的 home
文件夹下面看到该文件夹(注意是隐藏文件夹)。
在 IntelliJ IDEA
中打开任何一个 Java
项目后,您可以按 Command + :
快捷键打开项目结构窗口,在 Project SDK
模块选择新建一个 JDK
后输入你需要的 JDK
版本在 SDKMan
中的路径即可。
因为 .sdkman
是隐藏文件夹不太方便查找,可以使用以下命令创建一个非隐藏文件夹指向它。
ln -s ~/.sdkman ~/sdkman