在 Ubuntu 上经常出现 Java 版本冲突,主要是因为 系统里可以同时存在多个 JDK/JRE,而“默认 Java”由 alternatives 机制决定。下面从原因到解决方法系统说明。
Ubuntu 允许同时安装:
例如:
/usr/lib/jvm/java-8-openjdk-amd64
/usr/lib/jvm/java-11-openjdk-amd64
/usr/lib/jvm/java-17-openjdk-amd64
update-alternatives 决定“java 指向谁”Ubuntu 用 alternatives 管理命令:
java
javac
实际指向:
/etc/alternatives/java -> /usr/lib/jvm/.../bin/java
如果你装了多个 Java,系统默认版本可能被改掉,导致冲突。
常见错误配置:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
但又没统一管理,结果:
java -version ✅版本不匹配 → 启动失败或行为异常
例如:
sudo apt install maven
可能顺带装了:
default-jdk (Java 11 或 17)
你原本用的是 Java 8 → 被覆盖
java -version
which java
ls /usr/lib/jvm/
update-alternatives --list java
update-alternatives --display java
sudo update-alternatives --config java
选择对应版本编号即可。
同样处理:
sudo update-alternatives --config javac
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
只对当前终端有效,不影响系统。
[Service]
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
然后:
sudo systemctl daemon-reload
sudo apt remove openjdk-11-jdk
⚠️ 注意别卸载系统依赖的 default-jdk
✅ 系统只保留一个 default Java ✅ 项目用 JAVA_HOME 控制版本 ✅ IDE(IDEA / VSCode)单独指定 JDK ✅ 服务器用 systemd 指定 JAVA_HOME
Ubuntu 的 Java 冲突,本质是 多版本共存 + 默认指向混乱 + 环境变量不统一。
如果你愿意,可以告诉我:
java -version 输出我可以帮你精准定位并解决。