Files
MyBlog/src/programming/backend/java/功能整理/SDKMAN-Java-Maven版本管理.md
mangmang 86c8d8c512 feat(vuepress): 配置vite打包器及本地搜索功能
- 使用 viteBundler 配置 Vite,添加 SCSS 预处理器选项
- 启用主题的本地搜索功能以提升用户体验
- 更新 devDependencies,新增 @vuepress/plugin-search 并升级 sass-embedded 版本
- 优化导航栏样式,调整 .vp-navbar .auto-link 相关 CSS
- 重构 Java SDKMAN 和 Maven 版本管理文档,完善指令说明和操作步骤
- 修改 sidebar 配置,增加根路径禁用侧边栏显示
2026-03-06 02:07:36 +08:00

5.7 KiB
Raw Blame History

title, icon, date, category, tag
title icon date category tag
使用 SDKMAN 管理 Java 和 Maven 多版本 mdi:package-variant 2026-02-04 JAVA
SDKMAN
Java
Maven
版本管理

使用 SDKMAN 管理 Java 和 Maven 多版本方案

在开发过程中,我们经常需要在不同的项目之间切换不同的 Java 和 Maven 版本。SDKMAN (Software Development Kit Manager) 是一个强大的工具,可以帮助我们轻松管理多个版本的软件开发工具包。

概述

在开发过程中,我们经常需要在不同的项目之间切换不同的 Java 和 Maven 版本。SDKMAN (Software Development Kit Manager) 是一个强大的工具,可以帮助我们轻松管理多个版本的软件开发工具包。

当前系统环境

  • 操作系统: Linux
  • 当前 Java 版本: OpenJDK 1.8.0_472 (Java 8)
  • 当前 Maven 版本: Apache Maven 3.8.7
  • SDKMAN 状态: 需要安装

安装 SDKMAN

1. 下载并安装 SDKMAN

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

2. 初始化 SDKMAN

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

3. 验证安装

sdk version

管理 Java 版本

1. 查看可用的 Java 版本

sdk list java

2. 安装特定版本的 Java

# 安装 Java 11
sdk install java 11.0.21-tem

# 安装 Java 17 (LTS)
sdk install java 17.0.9-tem

# 安装 Java 21 (最新 LTS)
sdk install java 21.0.1-tem

# 安装 OpenJDK 版本
sdk install java 8.0.382-tem

3. 切换 Java 版本

# 临时切换到 Java 11
sdk use java 11.0.21-tem

# 临时切换到 Java 17
sdk use java 17.0.9-tem

4. 设置默认 Java 版本

sdk default java 17.0.9-tem

5. 查看当前使用的 Java 版本

sdk current java
java -version

管理 Maven 版本

1. 查看可用的 Maven 版本

sdk list maven

2. 安装特定版本的 Maven

# 安装 Maven 3.8.x
sdk install maven 3.8.8

# 安装 Maven 3.9.x
sdk install maven 3.9.6

3. 切换 Maven 版本

sdk use maven 3.9.6

4. 设置默认 Maven 版本

sdk default maven 3.9.6

5. 查看当前使用的 Maven 版本

sdk current maven
mvn -version

项目级版本管理

SDKMAN 支持项目级别的版本管理,通过 .sdkmanrc 文件可以实现进入项目目录时自动切换到指定版本。

1. 创建项目版本配置文件

# 在项目根目录创建 .sdkmanrc 文件
cat > .sdkmanrc << EOF
java=17.0.9-tem
maven=3.9.6
EOF

2. 启用项目版本环境

# 进入项目目录
cd your-project

# 激活项目配置的版本
sdk env

3. 自动切换(可选)

SDKMAN 可以配置为在进入包含 .sdkmanrc 文件的目录时自动切换版本。

# 启用自动切换
sdk enable auto_env

常用 SDKMAN 命令

1. 查看所有已安装的版本

sdk list installed

2. 查看特定工具的在线可用版本

sdk list java
sdk list maven

说明:sdk list javasdk list maven 展示的是远程可安装版本,不是本机已安装版本。

3. 查看本机已安装版本与当前生效版本

# 查看当前生效版本SDKMAN 视角)
sdk current
sdk current java
sdk current maven

# 查看命令实际生效版本(系统视角)
java -version
mvn -version
which java
which mvn

# 查看 SDKMAN 本机已安装版本目录
ls -1 ~/.sdkman/candidates/java
ls -1 ~/.sdkman/candidates/maven

# 查看 current 软链接实际指向
ls -l ~/.sdkman/candidates/java/current
ls -l ~/.sdkman/candidates/maven/current

4. 卸载不需要的版本

# 卸载 Java 11
sdk uninstall java 11.0.21-tem

# 卸载 Maven 3.8.8
sdk uninstall maven 3.8.8

5. 更新 SDKMAN

sdk selfupdate

6. 查看帮助

sdk help

实际使用场景示例

场景 1新项目使用 Java 17 + Maven 3.9

cd new-project
sdk use java 17.0.9-tem
sdk use maven 3.9.6
echo "java=17.0.9-tem" > .sdkmanrc
echo "maven=3.9.6" >> .sdkmanrc

场景 2维护旧项目使用 Java 8 + Maven 3.8

cd legacy-project
sdk use java 8.0.382-tem
sdk use maven 3.8.8
echo "java=8.0.382-tem" > .sdkmanrc
echo "maven=3.8.8" >> .sdkmanrc

场景 3升级项目 Java 版本

cd project-to-upgrade
# 从 Java 8 升级到 Java 17
sdk install java 17.0.9-tem
sdk use java 17.0.9-tem
# 更新 .sdkmanrc 文件
sed -i 's/java=.*/java=17.0.9-tem/' .sdkmanrc

最佳实践建议

  1. 保持系统 Java 版本最低: 系统级别的 Java 保持为较低版本(如 Java 8其他版本通过 SDKMAN 管理。

  2. 项目配置版本控制: 将 .sdkmanrc 文件提交到版本控制系统,确保团队成员使用一致的开发环境。

  3. 定期清理不需要的版本: 定期使用 sdk list installed 查看已安装版本,卸载不再使用的版本以节省磁盘空间。

  4. 文档化版本要求: 在项目 README 文件中明确说明所需的 Java 和 Maven 版本。

  5. 测试环境一致性: 开发、测试、生产环境尽量保持相同的版本配置。

环境变量配置

如果需要永久配置环境变量,可以在 ~/.bashrc~/.zshrc 中添加:

# SDKMAN 初始化
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]] && source "$SDKMAN_DIR/bin/sdkman-init.sh"

总结

SDKMAN 提供了一个优雅的解决方案来管理 Java 和 Maven 的多版本问题。通过合理使用 SDKMAN我们可以

  • 轻松在不同项目间切换版本
  • 避免版本冲突问题
  • 简化团队成员的环境配置
  • 提高开发效率和项目维护性

建议所有需要处理多版本 Java 项目的开发者都使用 SDKMAN 进行版本管理。