一、SDKMAN是什么?为什么要用它管理JDK?

如果你是一个Java开发者,肯定遇到过这样的烦恼:不同项目需要不同版本的JDK,手动安装、配置环境变量简直让人头大。这时候,SDKMAN就是你的救星!

SDKMAN是一个用于管理多个软件开发工具包版本的工具,支持Java、Groovy、Scala等。它的核心优势在于:

  • 一键安装:无需手动下载解压
  • 版本切换:命令行快速切换不同版本
  • 跨平台:Windows/macOS/Linux通吃
  • 依赖管理:自动处理环境变量

比如你同时维护着使用JDK 8和JDK 17的项目,用SDKMAN可以这样玩:

# 列出所有可安装的JDK版本
sdk list java

# 安装Liberica JDK 17
sdk install java 17.0.7-bell

# 临时切换到JDK 11
sdk use java 11.0.19-bell

二、安装SDKMAN的全平台指南

Windows用户看这里

以PowerShell为例(需要管理员权限):

# 先安装curl(如果还没有)
winget install curl.curl

# 安装SDKMAN
Invoke-WebRequest -Uri "https://get.sdkman.io" -OutFile "sdkman-init.ps1"
.\sdkman-init.ps1

# 重启终端后验证
sdk version

macOS/Linux用户更简单

直接终端执行:

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

# 验证安装
sdk current

注意:如果遇到权限问题,记得给脚本执行权限:chmod +x ~/.sdkman/bin/sdkman-init.sh

三、BellSoft Liberica JDK的安装实战

为什么选Liberica?因为它:

  • 100%开源且通过JCK认证
  • 提供完整的JVM实现
  • 支持所有主流平台

安装特定版本

# 查看所有Liberica版本(注意bell后缀)
sdk list java | grep bell

# 安装LTS版本(示例安装JDK 11)
sdk install java 11.0.19-bell

# 安装完成后验证
java -version

多版本管理示例

假设我们需要同时维护两个项目:

# 项目A需要JDK 8
sdk install java 8.0.382-bell

# 项目B需要JDK 17
sdk install java 17.0.8-bell

# 创建项目目录时自动切换版本
cd ~/projects/legacy-system
sdk use java 8.0.382-bell

cd ~/projects/new-microservices
sdk use java 17.0.8-bell

四、日常使用的高级技巧

1. 设置默认版本

# 设置全局默认JDK
sdk default java 17.0.8-bell

# 验证默认版本
java -version

2. 版本回滚

当新版本出问题时:

# 查看安装历史
sdk history java

# 回滚到上一个版本
sdk rollback java

3. 清理旧版本

# 列出所有已安装版本
sdk list java | grep installed

# 删除不再需要的版本
sdk uninstall java 11.0.18-bell

五、应用场景与技术对比

典型应用场景

  • CI/CD管道:在不同构建阶段快速切换JDK版本
  • 本地开发:同时维护多个遗留/新项目
  • 教学环境:演示不同Java特性的版本差异

与传统方式的对比

方式 优点 缺点
手动安装 完全控制安装路径 环境变量配置繁琐
包管理器 自动依赖管理 版本选择受限
SDKMAN 多版本隔离管理 需要学习新工具

六、注意事项与常见问题

  1. 网络问题
    国内用户可能遇到下载慢的情况,可以设置代理:

    export SDKMAN_CANDIDATES_API="https://mirror.sjtu.edu.cn/sdkman/candidates"
    
  2. 冲突解决
    如果已有其他Java管理工具(如jenv),建议先清理原有配置:

    # 检查环境变量
    echo $JAVA_HOME
    
  3. 磁盘空间
    每个JDK版本会占用300MB-500MB空间,定期清理旧版本:

    sdk flush archives
    sdk flush temp
    

七、总结

通过SDKMAN管理BellSoft Liberica JDK,你至少能获得三大收益:

  1. 时间节省:再也不用折腾环境变量
  2. 环境纯净:版本之间完全隔离
  3. 灵活切换:应对多项目需求游刃有余

最后送大家一个实用命令组合,快速查看当前所有环境状态:

sdk current | grep java && java -version && javac -version