引言
近年来,Java 版本更新频繁,刚适应 Java 8,就已经传来了 Java 14 的消息。无论是为体验新特性(Java 12 中有非常实用的功能),还是因为项目升级或兼容需求,我们都可能需要管理多个 Java 版本。
配置单个 Java 环境变量并不复杂,但当需要管理多个 Java 版本时,反复配置环境变量显得非常繁琐,传统配置方式也无法灵活切换 Java 版本。
那么,如何轻松管理和使用多个版本的 Java 呢?
显然,我们并非首次面对这种困境。目前已知有三种解决方案:
立即学习“Java免费学习笔记(深入)”;
Jabba(https://www.php.cn/link/f816fdcb111b79750431ce758e283ead sdkman(https://www.php.cn/link/0ff0a77035f9569943049ed3e980bb0d sdkman 解决我们面临的问题,帮助我们灵活配置和使用 Java。
sdkman 介绍
SDKMAN 是一个用于在大多数基于 unix 的系统上管理多个软件开发工具包(Java、Groovy、scala、kotlin 和 Ceylon,Ant、gradle 等)的并行版本的工具。
它提供了一个便捷的命令行界面(CLI)和 API,用于安装、切换、删除和列出候选对象。本文将主要通过管理 Java 来展示 sdkman 的使用。
sdkman 安装
在类 Unix 平台上安装 sdkman 非常简单。它可以顺利安装在 mac OSX、linux、WLS、Cygwin、Solaris 和 FreeBSD 上,同时支持 bash 和 ZSH shell。
只需打开一个新终端并输入:
$ curl -s "https://get.sdkman.io" | bash
按照相应的指令提示,完成操作后继续输入:
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
至此,我们可以验证 sdkman 的安装版本:
$ sdk version
上图中红色框标记显示了我当前的 sdkman 版本。每执行
sdk version
命令时,都会检查是否有新版本,如果需要更新,只需输入
y
即可。
有些系统发行版本不包含
zip
和
unzip
,如果安装时遇到相关错误,可以输入如下命令安装
zip
和
unzip
:
$ sudo apt-get install zip unzip
从上面的安装命令可以看出,sdkman 默认的安装路径在
$HOME/.sdkman
下,我们也可以自定义安装路径,只需指定
SDKMAN_DIR
变量值即可:
$ export SDKMAN_DIR="/usr/local/sdkman" && curl -s "https://get.sdkman.io" | bash
至此,sdkman 的安装就结束了。接下来我们看看如何使用它。
sdkman 使用教程
在命令行下学习新工具当然是从查看帮助命令开始,输入:
$ sdkman help
从上图中可以看出,sdkman 的使用说明已按颜色区分内容。我们将根据上图详细说明使用教程。
sdk list
首先,输入:
$ sdk list
绿色标记显示了 sdkman 集成的所有可用候选对象,按回车键「enter」可以看到更多可用候选对象。
我们指定候选对象,输入:
$ sdk list java
从上图中可以看到所有可用的 Java 版本、标识符以及状态。我已经安装了 Java 12 和 11。
有了这些信息做铺垫,我们可以安装任意 sdkman 内置的软件开发包了,继续以 Java 为例。
sdk install
回顾 sdkman help 命令的输出,使用 install 命令,我们再安装一个最新的 Java
13.0.1.j9
版本。
从上图可以看出,绿色标记的内容是 list 命令结果中的版本值,但报错不可用,输入
identifier
编号才能正常下载,这里需要注意。
安装完成后,状态会变为 installed。
sdk current
当安装多个版本的 Java 时,我们输入下面命令获取当前正在使用的候选对象版本:
$ sdk current java
sdk use
了解了当前使用版本,如果我们想切换到其他版本,可以输入:
$ sdk use java 12.0.2.j9-adpt
注意⚠️:这里同样是指定的 identifier 的值。
sdk default
如果我们想指定某个版本为默认版本,可以输入:
$ sdk default java jdk1.8.0_162.jdk
注意⚠️:这里同样是指定的 identifier 的值。
sdk uninstall
当我们想卸载某个版本时,可以输入:
$ sdk uninstall java 12.0.2.j9-adpt
注意⚠️:这里同样是指定的 identifier 的值。
sdk upgrade
如果我们想升级某个候选对象,可以输入:
$ sdk upgrade java
sdk flush
使用 sdkman 时间变长也会慢慢产生很多缓存内容,我们可以输入清理广播消息:
$ sdk flush broadcast
清理下载的 sdk 二进制文件(长时间使用后清理,可以节省出很多空间):
$ sdk flush archives
清理临时文件内容:
$ sdk flush temp
至此,sdkman 的基本使用就已经介绍完了。其实这些命令都不用急,想不起来的时候执行
sdk help
来临时查看一下就好。
sdkman 卸载
如果我们不喜欢 sdkman 了,我们也可以轻松地卸载它:
$ tar zcvf ~/sdkman-backup_$(date +%F-%kh%M).tar.gz -C ~/ .sdkman $ rm -rf ~/.sdkman
最后,打开你的 .bashrc、.bash_profile 和/或 .profile,找到并删除下面这几行。
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! [[ -s "/home/dudette/.sdkman/bin/sdkman-init.sh" ]] && source "/home/dudette/.sdkman/bin/sdkman-init.sh"
我使用的是 zshrc,找到 .zshrc 文件删除上面内容即可。
至此,基于 Unix 系统的,有关 sdkman 的安装、使用及卸载都已经介绍完了,可以上手试一试了。相信很多小伙伴用的是 windows,除了 jenv,sdkman 和 Jabba 都有 windows 用户的解决方案:
sdkman Windows 解决方案
在 sdkman 官网首页同样为 Windows 用户提供了解决方案,小伙伴们找到如下位置查看即可。
我看了一下过程,也很简单,由于手头没有 Windows 电脑,这个请小伙伴们自行尝试,有问题欢迎留言。