Ubuntu 切换 Java 版本指南
一 使用 update-alternatives 切换系统默认版本
- 安装多个 JDK(示例为 OpenJDK 11 与 OpenJDK 17):
- sudo apt update
- sudo apt install openjdk-11-jdk
- sudo apt install openjdk-17-jdk
- 将 java、javac 等命令注册到 alternatives(优先级数值越大优先级越高):
- sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1
- sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-openjdk-amd64/bin/java 2
- sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 1
- sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac 2
- 交互式选择默认版本:
- sudo update-alternatives --config java
- sudo update-alternatives --config javac
- 验证:
- java -version
- javac -version
- 非交互式一键切换(已知路径时):
- 查看可选项:update-alternatives --list java
- 指定版本:sudo update-alternatives --set java /usr/lib/jvm/java-17-openjdk-amd64/bin/java
- 同步切换编译器:sudo update-alternatives --set javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac。
二 设置 JAVA_HOME 与环境变量
- 为当前用户设置(写入 shell 配置文件,如 ~/.bashrc 或 ~/.zshrc):
- echo ‘export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64’ >> ~/.bashrc
- echo ‘export PATH=$JAVA_HOME/bin:$PATH’ >> ~/.bashrc
- source ~/.bashrc(或 source ~/.zshrc)
- 为所有用户设置(写入 /etc/environment,系统级生效):
- 在 /etc/environment 中添加:JAVA_HOME=“/usr/lib/jvm/java-17-openjdk-amd64”
- 重新登录或执行 source /etc/environment 使其生效
- 注意:若设置了 JAVA_HOME,请确保它指向你通过 alternatives 选择的同一 JDK,避免与系统默认不一致。
三 使用版本管理工具
- SDKMAN!(适合开发与多版本并行):
- 安装:curl -s “https://get.sdkman.io” | bash && source “$HOME/.sdkman/bin/sdkman-init.sh”
- 安装 JDK:sdk install java 11.0.11-open;sdk install java 17.0.1-open
- 切换:sdk use java 11.0.11-open;设置默认:sdk default java 11.0.11-open
- jenv(轻量 Java 版本管理):
- 安装:git clone https://github.com/jenv/jenv.git ~/.jenv && echo ‘export PATH=“$HOME/.jenv/bin:$PATH”’ >> ~/.bashrc && echo ‘eval “$(jenv init -)”’ >> ~/.bashrc && source ~/.bashrc
- 添加 JDK:jenv add /usr/lib/jvm/java-11-openjdk-amd64;jenv add /usr/lib/jvm/java-17-openjdk-amd64
- 切换:jenv global 11.0;jenv shell 17.0;jenv local 17.0(当前目录生效)
四 常见问题与排查
- 切换后仍显示旧版本:
- 检查 java 命令来源:which java(应为 /usr/bin/java,它是 alternatives 的软链)
- 检查环境变量:echo $JAVA_HOME,若手动设置了 JAVA_HOME,请确认路径与所选版本一致
- 若使用手动 JDK(非 apt 安装),需确保已用 alternatives 注册了 java、javac、jar 等命令
- 列出与移除已注册版本:
- 列出:update-alternatives --list java
- 移除:sudo update-alternatives --remove java /path/to/java
- 仅临时使用某版本(无需改默认):
- /usr/lib/jvm/java-17-openjdk-amd64/bin/java -jar app.jar
- 特定应用(如 Tomcat)使用指定 JDK:
- 编辑其配置文件(如 /etc/default/tomcat)设置 JAVA_HOME,然后重启服务:sudo systemctl restart tomcat。