必须同步更新java_home和path:java_home需精确指向新jdk根目录(不含/bin),path中必须用$java_home/bin(linux/macos)或%java_home%\bin(windows)引用,不可写死绝对路径;否则java、javac失效,maven/gradle/tomcat等工具无法识别jdk。

换 OpenJDK 安装目录后,JAVA_HOME 和 PATH 必须同步更新,否则 java、javac 命令会失效,Maven/Gradle/Tomcat 等工具也会找不到 JDK。
必须改的两个环境变量
系统或用户级的环境变量中,只要存在以下两项,就一定得改:
-
JAVA_HOME:值必须精确指向新解压后的 JDK 根目录(不含/bin),例如/opt/java/jdk-17.0.10或/usr/lib/jvm/java-17-openjdk-amd64 -
PATH中引用JAVA_HOME的部分:必须是$JAVA_HOME/bin(Linux/macOS)或%JAVA_HOME%\bin(Windows)——不能写死绝对路径,否则换目录后PATH就失效了
常见错误是只改了 JAVA_HOME,却忘了检查 PATH 里是否还在用旧路径,或者误把 PATH 改成了硬编码路径(比如 /old/path/jdk17/bin),这种写法一旦换目录就彻底断掉。
Linux/macOS 下还要检查 update-alternatives 注册项
如果你用过 update-alternatives --install 把 JDK 加入系统候选列表,那么换目录后这些注册项不会自动更新。运行:
sudo update-alternatives --display java
如果输出里显示的路径仍是旧目录,就必须重新注册:
- 先移除旧注册:
sudo update-alternatives --remove java /old/path/jdk17/bin/java - 再添加新路径:
sudo update-alternatives --install /usr/bin/java java /new/path/jdk17/bin/java 100 - 同理处理
javac:sudo update-alternatives --install /usr/bin/javac javac /new/path/jdk17/bin/javac 100
不清理旧注册项,update-alternatives --config java 切换时可能选到已不存在的路径,执行 java -version 会报 Command not found 或直接崩溃。
IDE 和构建工具常被忽略的配置点
IntelliJ IDEA、Eclipse、VS Code 的 Java 插件,以及 Maven 的 settings.xml、Gradle 的 gradle.properties,都可能显式指定了 java.home 或 JAVA_HOME。这些配置独立于系统环境变量,换 JDK 目录后不会自动同步:
- IDEA:File → Project Structure → Project → Project SDK → 点击“+”重新添加新 JDK 路径
- Maven:检查
~/.m2/settings.xml是否有<toolchain></toolchain>或<profile></profile>强制指定了JAVA_HOME - Gradle:检查
gradle.properties中是否有org.gradle.java.home,值必须指向新路径
这些地方漏改,会导致 IDE 编译报错 “Unsupported class file major version”,或 Maven 构建时用的还是旧 JDK —— 即使终端里 java -version 显示正确,项目依然跑不起来。
最麻烦的不是改配置,而是改完之后没验证清楚:只测了 java -version,却没跑 javac -version,也没在 IDE 里新建一个类编译一下。OpenJDK 换目录后,bin 目录下所有可执行文件(java、javac、javadoc、jshell)都必须能正常调用,缺一个,整个链路就断了。











