--- title: 使用 SDKMAN 管理 Java 和 Maven 多版本 icon: mdi:package-variant date: 2026-02-04 category: JAVA tag: - 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 ```bash curl -s "https://get.sdkman.io" | bash ``` ### 2. 初始化 SDKMAN ```bash source "$HOME/.sdkman/bin/sdkman-init.sh" ``` ### 3. 验证安装 ```bash sdk version ``` ## 管理 Java 版本 ### 1. 查看可用的 Java 版本 ```bash sdk list java ``` ### 2. 安装特定版本的 Java ```bash # 安装 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 版本 ```bash # 临时切换到 Java 11 sdk use java 11.0.21-tem # 临时切换到 Java 17 sdk use java 17.0.9-tem ``` ### 4. 设置默认 Java 版本 ```bash sdk default java 17.0.9-tem ``` ### 5. 查看当前使用的 Java 版本 ```bash sdk current java java -version ``` ## 管理 Maven 版本 ### 1. 查看可用的 Maven 版本 ```bash sdk list maven ``` ### 2. 安装特定版本的 Maven ```bash # 安装 Maven 3.8.x sdk install maven 3.8.8 # 安装 Maven 3.9.x sdk install maven 3.9.6 ``` ### 3. 切换 Maven 版本 ```bash sdk use maven 3.9.6 ``` ### 4. 设置默认 Maven 版本 ```bash sdk default maven 3.9.6 ``` ### 5. 查看当前使用的 Maven 版本 ```bash sdk current maven mvn -version ``` ## 项目级版本管理 SDKMAN 支持项目级别的版本管理,通过 `.sdkmanrc` 文件可以实现进入项目目录时自动切换到指定版本。 ### 1. 创建项目版本配置文件 ```bash # 在项目根目录创建 .sdkmanrc 文件 cat > .sdkmanrc << EOF java=17.0.9-tem maven=3.9.6 EOF ``` ### 2. 启用项目版本环境 ```bash # 进入项目目录 cd your-project # 激活项目配置的版本 sdk env ``` ### 3. 自动切换(可选) SDKMAN 可以配置为在进入包含 `.sdkmanrc` 文件的目录时自动切换版本。 ```bash # 启用自动切换 sdk enable auto_env ``` ## 常用 SDKMAN 命令 ### 1. 查看所有已安装的版本 ```bash sdk list installed ``` ### 2. 查看特定工具的在线可用版本 ```bash sdk list java sdk list maven ``` 说明:`sdk list java` 和 `sdk list maven` 展示的是远程可安装版本,不是本机已安装版本。 ### 3. 查看本机已安装版本与当前生效版本 ```bash # 查看当前生效版本(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. 卸载不需要的版本 ```bash # 卸载 Java 11 sdk uninstall java 11.0.21-tem # 卸载 Maven 3.8.8 sdk uninstall maven 3.8.8 ``` ### 5. 更新 SDKMAN ```bash sdk selfupdate ``` ### 6. 查看帮助 ```bash sdk help ``` ## 实际使用场景示例 ### 场景 1:新项目使用 Java 17 + Maven 3.9 ```bash 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 ```bash 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 版本 ```bash 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` 中添加: ```bash # 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 进行版本管理。