sdkman 来管理多 JDK 版本的环境

背景

sdkman

[sdkman 官网]是这么介绍它的:

SDKMAN! is a tool for managing parallel versions of multiple Software Development Kits on most Unix based systems.

sdkman 是一个用来管理大多数类 Unix 系统(例如 Mac OSX、Linux、Cygwin等) SDK 多版本的。例如,现在个人机器上主要还是使用 JDK8 的版本,但是,突然有个项目(比如新版 Elasticsearch 7.10)需要更高版本的 JDK 版本,这时候怎么方便管理你机器上的 JDK 环境呢?

看完下文的操作,你就会用 sdkman 来灵活切换你 SDK 的版本,真的方便!

安装 sdkman

安装 sdkman:

1
curl -s "https://get.sdkman.io" | bash

打开新的终端窗口:

1
source "$HOME/.sdkman/bin/sdkman-init.sh"

验证安装:

1
sdk version

常用命令

sdkman 支持多达大约 29 个软件开发包管理,我们也可以使用 命令来查看支持的完整列表:

1
sdk list

这个内容比较多,可以使用例如 sdk list java 列出我感兴趣的 candidate 版本。

官网 SDKS 页面列举了大部分可用的 sdk,但是并不完整,比如 Java 就没列举在这里。

安装指定的版本:

1
2
3
4
# 安装 java 16 版本
sdk install java 16.0.0.hs-adpt
# 安装 java 8 版本
sdk install java 8.0.352-amzn

安装时,可以使用 sdk install java 8 [tab键] 就可以列出可选的版本

临时使用指定版本(关闭终端之后失效):

1
2
3
sdk use java 8.0.352-amzn

设置默认版本:

sdk default java 8.0.352-amzn

1
2

查看当前使用的版本:

查看 java 当前版本

sdk current java

查看所有版本

sdk current

1
2

卸载指定版本的包:

sdk uninstall java 16.0.0.hs-adpt

1
2
3
4

> 如果卸载之后想再次安装之前通过 sdkman 卸载的版本,此时不会再次重新下载,会提示 `Found a previously downloaded java 11.0.7.hs-adpt archive. Not downloading it again...`,因为之前删除操作并没有真正的从你计算机上删除源压缩包文件

清理:

清理广播消息

sdk flush broadcast

清理下载的 sdk 二进制文件

sdk flush archives

清理临时文件内容

sdk flush temp

1
2

升级 sdkman

sdk selfupdate

1
2
3
4

## FAQ

### 管理本地已经安装的 JDK 版本:

sdk install java 1.8.0_231 /Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
`

local

其实就是在 /Users/michael/.sdkman/candidates/java 路径下,创建一个软连接 1.8.0_231 指向了机器原本的 JDK 安装目录

参考

  • sdkman/Usage
  • segmentfault/如何在一台计算机上安装多个 JDK 版本
  • segmentfault/Java升级那么快,多个版本如何灵活切换和管理?
Michael翔 wechat
ヾノ≧∀≦)o 欢迎订阅公众号「Coder魔法院」☑工具控 ☑编程 ☑读书☑电影
「🤓 码字不易,来杯Coffee👇」