PowerShell中需用[Environment]::SetEnvironmentVariable("JAVA_HOME", "路径", "Machine")以管理员权限永久设置系统级JAVA_HOME,否则仅当前会话有效;路径须为JDK根目录,且需同步更新PATH并重启终端验证。

PowerShell 里用 setx 或 [Environment]::SetEnvironmentVariable 才能永久设置 JAVA_HOME,直接写 $env:JAVA_HOME=... 只在当前窗口有效,关掉就消失。
必须用管理员权限运行 PowerShell
系统级环境变量写入注册表的 Machine 位置,普通用户无权修改。不以管理员身份运行,命令会静默失败或只写入用户级(User),多数开发工具如 Maven、Tomcat 不认用户级 JAVA_HOME。
- 右键“开始” → “Windows Terminal(管理员)” 或 “PowerShell(管理员)”
- 确认窗口标题栏含“管理员”字样
推荐命令:写入系统变量(Machine)
执行以下两行(替换为你本地 JDK 的实际路径,例如 C:\Program Files\Java\jdk-21.0.3):
[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\path\to\your\jdk", "Machine")
[Environment]::SetEnvironmentVariable("Path", "%JAVA_HOME%\bin;" + [Environment]::GetEnvironmentVariable("Path", "Machine"), "Machine")
- 第一行设 JAVA_HOME 到系统变量,路径必须是 JDK 根目录(不含 \bin)
- 第二行把
%JAVA_HOME%\bin插到 PATH 开头,确保优先调用新 JDK - 注意:这里用的是 Windows 原生变量引用语法
%JAVA_HOME%,不是 PowerShell 的$env:JAVA_HOME
验证是否真正生效
关闭所有已打开的终端,新开一个 PowerShell 窗口再运行:
立即学习“Java免费学习笔记(深入)”;
echo $env:JAVA_HOME where.exe java java -version javac -version
-
echo $env:JAVA_HOME应输出你设置的完整路径(PowerShell 自动展开 %JAVA_HOME%) -
where.exe java应指向%JAVA_HOME%\bin\java.exe - 后两条命令版本号必须一致,且与你安装的 JDK 版本匹配
常见失败原因
不是命令写错了,而是环境或路径细节没对上:
- JDK 路径里有中文、空格或特殊字符?建议安装到纯英文无空格路径,如
D:\jdk\jdk-21 - PATH 中存在其他 JDK 的 bin 路径(比如旧版 Oracle JDK 自动加的),排在
%JAVA_HOME%\bin前面,导致where java返回旧版本 - IDE(如 IntelliJ)或构建工具(如 Maven)未重启,它们启动时已缓存了旧环境,需完全退出重开


















