必须新开命令行窗口,因环境变量是进程启动时快照复制的只读副本,已运行终端不会自动更新;windows中关闭旧cmd/powershell并重开即可加载最新变量,powershell还可手动执行$env:path=...合并系统与用户路径临时生效。

不需要重启电脑,但必须新开命令行窗口——因为环境变量是进程启动时“快照”下来的,已运行的终端不会自动更新。
环境变量是进程级继承的
当你打开一个 CMD、PowerShell 或 Terminal,系统会把当前的环境变量(如 PATH、JAVA_HOME)复制一份给这个进程。后续你通过「系统属性」或配置文件修改了变量,只是改了源头,并不会反向通知已经跑起来的终端去刷新。它就像拍了一张照片,之后原图怎么改,照片都不会变。
不同系统刷新方式不同
- Windows CMD:关掉旧窗口,新开一个即可读取最新系统/用户变量
-
Windows PowerShell:默认不自动合并系统和用户 PATH,最稳妥做法仍是关闭重开;若想临时生效,可运行:
$env:PATH = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") -
macOS/Linux:在
~/.zshrc或~/.bash_profile中添加 export 后,需手动执行source ~/.zshrc才能让当前终端加载,新窗口则自动生效
IDE 和构建工具也要单独处理
IntelliJ IDEA、VS Code 内置终端、Maven、Gradle 等工具,都是在启动时读取环境变量并缓存的。即使终端里 java -version 已正确,IDE 可能还在用旧 JDK。
- VS Code:完全退出再重开,否则内置终端仍继承旧环境
- IDEA:需重启软件,或在 File → Project Structure → Project Settings → Project → SDK 中手动指定 JDK
- Maven:运行
mvn -v前确认终端已刷新,且where java(Windows)或which java(macOS/Linux)指向的是预期路径
常见误操作直接导致“不生效”
- JAVA_HOME 指向了
jdk-21\bin,而不是jdk-21根目录 - PATH 中漏加
%JAVA_HOME%\bin(Windows)或$JAVA_HOME/bin(macOS/Linux) - PATH 里存在硬编码的老 JDK 路径(如
C:\jdk1.8\bin),且排在%JAVA_HOME%\bin前面 - 修改的是用户变量,却在管理员权限的终端里验证,或反过来
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











