sdkman安装使用

SDKMAN 安装指南 - 自定义安装到 /opt/sdkman

概述

介绍如何在 macOS M4 系统上将 SDKMAN 安装到自定义目录 /opt/sdkman

安装步骤

1. 清理现有配置(重要!)

如果之前安装过 SDKMAN,需要先清理现有配置:

bash 复制代码
# 检查是否有现有配置
cat ~/.zshrc | grep -i sdkman

# 如果有配置,删除 ~/.zshrc 中的 SDKMAN 相关行
# 可以手动编辑或使用以下命令删除
sed -i '' '/SDKMAN/d' ~/.zshrc

# 取消当前会话中的 SDKMAN_DIR 环境变量
unset SDKMAN_DIR

# 删除可能存在的旧安装目录
rm -rf ~/.sdkman

2. 创建目录并设置权限

bash 复制代码
# 创建 sdkman 目录
sudo mkdir -p /opt/sdkman

# 设置目录权限
sudo chown -R $USER:staff /opt/sdkman

3. 验证权限设置

bash 复制代码
# 测试是否可以在目录中创建文件
touch /opt/sdkman/test.txt
ls -la /opt/sdkman/
rm /opt/sdkman/test.txt

4. 安装 SDKMAN

bash 复制代码
# 使用环境变量指定安装目录
SDKMAN_DIR="/opt/sdkman" curl -s "https://get.sdkman.io" | bash

5. 处理默认安装位置

如果安装脚本将文件安装到了 ~/.sdkman,需要移动到目标目录:

bash 复制代码
# 移动文件到目标目录
mv ~/.sdkman/* /opt/sdkman/

# 删除默认目录
rm -rf ~/.sdkman

6. 更新配置文件

修改 ~/.zshrc 文件中的 SDKMAN 路径:

bash 复制代码
# 使用 sed 命令更新路径
sed -i '' 's|$HOME/.sdkman|/opt/sdkman|g' ~/.zshrc

配置文件应该包含以下内容:

bash 复制代码
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/opt/sdkman"
[[ -s "/opt/sdkman/bin/sdkman-init.sh" ]] && source "/opt/sdkman/bin/sdkman-init.sh"

7. 验证安装

bash 复制代码
# 重新加载配置
source ~/.zshrc

# 检查版本
sdk version

# 查看帮助
sdk help

预期输出

成功安装后,sdk version 应该显示:

makefile 复制代码
SDKMAN!
script: 5.20.0
native: 0.7.14 (macos aarch64)

常见问题

权限问题

如果遇到权限拒绝错误,确保:

  • 使用 sudo 创建 /opt/sdkman 目录
  • 正确设置目录所有者为当前用户
  • 目录所有者设置正确

安装位置问题

SDKMAN 安装脚本默认安装到 ~/.sdkman,需要手动移动文件并更新配置。

配置文件问题

确保 ~/.zshrc 中的路径指向 /opt/sdkman 而不是 ~/.sdkman

安装失败问题

如果安装时提示"You already have SDKMAN installed"但实际无法使用:

  • 检查 ~/.zshrc 是否有旧的 SDKMAN 配置
  • 使用 unset SDKMAN_DIR 清除环境变量
  • 删除旧配置后重新安装

使用示例

bash 复制代码
# 列出可用的 Java 版本
sdk list java

# 安装 Java
sdk install java 17.0.0-tem

# 切换 Java 版本
sdk use java 17.0.0-tem

# 设置默认版本
sdk default java 17.0.0-tem
相关推荐
WebInfra2 分钟前
Rspack 2.2 发布:30+ 项性能优化,拥抱 Solid 2.0
前端·javascript·前端框架
额额额对了10 分钟前
Linux 进程管理详解:从概念到实战
java·服务器·前端
fatcoder11 分钟前
玩转 Redis · Set 篇
前端·redis·后端
爱喝麻油的小哆11 分钟前
🐾 Day 5|桌面数字人-接入llm可以对话啦
前端·three.js
我叫黑大帅15 分钟前
关于没有对生产者做校验的思考
前端·面试·架构
掘金者阿豪26 分钟前
你的公网 IP 是专线还是动态变化的?一文讲透动态 IP 与固定 IP 的那些事
前端·后端
invicinble35 分钟前
把握理解技术文章转化为工程水平的深度理解
前端
前端炒粉39 分钟前
fetch+readablestream(Streamable)流式输出
java·服务器·前端
风骏时光牛马43 分钟前
AIRAG服务异常监控告警
前端
大厂码农老A1 小时前
汤森路透的座上宾?Qwen3.5-397B-A17B到底有什么本事?
前端·人工智能·后端