应先查再动:用java -version和which java确认当前实际版本,Ubuntu/Debian运行dpkg -l | grep -i jdk或apt list --installed | grep openjdk,CentOS/RHEL运行rpm -qa | grep -i java,若有旧版如java-1.8.0或java-11-openjdk,需sudo apt remove --purge openjdk-8-jdk或sudo yum remove java-11-openjdk-devel,并执行autoremove避免冲突。

直接装 openjdk-17-jdk 就行,除非你有强合规要求必须用 Oracle JDK。包管理器安装省事、路径干净、update-alternatives 自动接管,95% 的生产场景够用。
怎么确认系统是否已装旧版 Java 并清理干扰
很多“装了但 java -version 不生效”的问题,根源是旧版本残留占着 /usr/bin/java 或 PATH 优先级更高。先查再动:
-
java -version和which java看当前实际在用哪个 - Ubuntu/Debian:运行
dpkg -l | grep -i jdk或apt list --installed | grep openjdk - CentOS/RHEL:运行
rpm -qa | grep -i java - 如果输出里有
java-1.8.0、java-11-openjdk这类,建议卸载:sudo apt remove --purge openjdk-8-jdk(Ubuntu)或sudo yum remove java-11-openjdk-devel(CentOS)
注意:sudo apt autoremove 或 sudo yum autoremove 后再装新版本,避免 alternatives 注册冲突。
用包管理器装 openjdk-17-jdk,为什么不用配环境变量
因为 openjdk-17-jdk 包自带 update-alternatives 配置脚本,安装时自动完成三件事:
立即学习“Java免费学习笔记(深入)”;
- 把真实 JDK 路径(如
/usr/lib/jvm/java-17-openjdk-amd64/)注册进alternatives系统 - 创建符号链接:
/usr/bin/java→/usr/lib/jvm/java-17-openjdk-amd64/bin/java - 把
/usr/bin加入默认PATH,所以无需手动改/etc/profile.d/
验证是否真生效?别只信 java -version,多跑这三行:
java -version<br>javac -version<br>readlink -f $(which java) | sed 's|/bin/java$||'
最后一行输出应该和 ls -F /usr/lib/jvm/ 里看到的 JDK 根目录一致——这才是 JAVA_HOME 应该指向的位置。
手动安装 Oracle JDK 17,JAVA_HOME 容易写错在哪
最常错的是把 JAVA_HOME 设成 /path/to/jdk-17.0.x/bin,而不是 /path/to/jdk-17.0.x。后果很隐蔽:
-
java命令能跑,但javac报tools.jar not found - Maven 编译失败,提示
Could not find artifact org.apache.maven:maven-core - IDEA 启动报
Cannot determine classpath for module 'xxx'
正确做法:
- 解压后先进目录看结构:
ls -F /opt/jdk-17.0.12/,确认存在bin/、lib/、jmods/子目录 -
JAVA_HOME必须等于这个根目录路径,例如/opt/jdk-17.0.12 - 配置写进
/etc/profile.d/jdk17.sh,两行足矣:export JAVA_HOME=/opt/jdk-17.0.12export PATH=$JAVA_HOME/bin:$PATH - 别碰
CLASSPATH——JDK 9+ 已弃用,加了反而坏事
装完发现还是调用旧版本,update-alternatives 怎么强制切
包管理器安装后,java 命令其实是个软链,背后由 update-alternatives 管理。如果它没自动选新版本,手动指定:
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711<br>sudo update-alternatives --config java
注意数字 1711 是优先级,要高于旧版本(比如 JDK 8 通常是 1081)。执行 --config 后会列出所有选项,选中你的 JDK 17 行号回车即可。
复杂点在于:如果你混用了包管理器安装 + 手动安装,alternatives 里可能同时注册了两个路径,且优先级相近。此时必须先 sudo update-alternatives --remove java /old/path/bin/java 清掉旧注册,再重新 --install,否则切换永远不干净。


















