Debian Java 定制安装与多版本管理
一 安装前准备与版本选择
- 更新索引并确认可用版本:sudo apt update;apt search openjdk 查看仓库中的 OpenJDK 版本(如 8/11/17/21)。
- 选择策略:生产常用 LTS(如 11/17/21);开发与兼容性需求可保留 8。
- 建议将 JDK 统一放在 /usr/lib/jvm/,便于管理与切换。
- 多用户或系统级服务建议用 update-alternatives 管理默认版本;个人开发可用 SDKMAN 快速切换。
二 方式一 APT 安装 OpenJDK(推荐)
- 安装运行时或开发套件:
- sudo apt install default-jre
- sudo apt install default-jdk
- 或指定版本:sudo apt install openjdk-17-jdk / openjdk-11-jdk
- 验证:java -version、javac -version。
- 说明:APT 安装便于安全更新与依赖管理,是最简便、可维护的定制方式。
三 方式二 手动安装 Oracle JDK 或压缩包 JDK(便于精确版本控制)
- 通用步骤
- 从官方站点下载 .tar.gz(或 .deb)包。
- 解压到统一目录:sudo tar zxvf jdk-xx_linux-x64_bin.tar.gz -C /usr/lib/jvm。
- 使用 update-alternatives 注册并切换:
- sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-xx/bin/java 200
- sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-xx/bin/javac 200
- 交互选择:sudo update-alternatives --config java(同法配置 javac)。
- 验证:java -version、javac -version。
- 安装 .deb 包(若下载到 .deb):sudo dpkg -i jdk-xx_linux-x64_bin.deb。
- 说明:手动安装适合需要特定小版本或厂商 JDK 的场景;用 alternatives 可避免 PATH 混乱。
四 环境变量与系统级配置
- 全局生效(推荐):编辑 /etc/environment,添加:JAVA_HOME=“/usr/lib/jvm/java-17-openjdk-amd64”(路径按实际调整);执行 source /etc/environment 后,echo $JAVA_HOME 验证。
- 用户级生效:编辑 ~/.bashrc 或 ~/.zshrc,添加:
- export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
- export PATH=$JAVA_HOME/bin:$PATH
执行 source ~/.bashrc 生效。
- 注意:避免重复设置 PATH;若使用 alternatives,java/javac 已由 alternatives 接管,环境变量主要用于应用读取 JAVA_HOME。
五 多版本共存与切换 以及卸载清理
- 多版本共存与切换
- 注册多个版本到 alternatives(见第三部分),用 sudo update-alternatives --config java 交互选择;必要时为 javac 单独配置。
- 开发/测试场景可用 SDKMAN:curl -s “https://get.sdkman.io” | bash;source “$HOME/.sdkman/bin/sdkman-init.sh”;sdk list java;sdk install java 17.0.9-open;sdk use java 17.0.9-open。
- 卸载与清理
- APT 安装:sudo apt remove --purge openjdk-17-jdk;必要时 apt autoremove。
- 手动安装:sudo update-alternatives --remove java /usr/lib/jvm/jdk-xx/bin/java;sudo update-alternatives --remove javac /usr/lib/jvm/jdk-xx/bin/javac;确认无进程占用后 rm -rf /usr/lib/jvm/jdk-xx。
- 清理环境变量:从 /etc/environment 或 ~/.bashrc 移除对应行并重新加载。