命令行中set或$env:设置的环境变量仅当前会话有效,因未写入注册表;永久生效需通过图形界面或PowerShell的[Environment]::SetEnvironmentVariable写入用户/系统级变量,并更新PATH后新开终端验证。

命令行中设置的环境变量无法永久生效,这是 Windows 系统本身的机制决定的。你在 CMD 输入 set JAVA_HOME=C:\path\to\jdk,或在 PowerShell 输入 $env:JAVA_HOME="C:\path\to\jdk",只是修改了当前终端会话的内存副本,关掉窗口就丢失,其他程序(如 IntelliJ、Maven、新打开的终端)完全读不到。
为什么命令行设置不持久
Windows 的环境变量存储在注册表中,分“用户级”和“系统级”。命令行的 set 或 $env: 操作不写入注册表,只影响当前进程及其子进程。因此:
- 新开一个 CMD/PowerShell 窗口,
%JAVA_HOME%为空 - Eclipse、Tomcat 等工具启动时查不到 JAVA_HOME
-
java -version能运行,是因为 PATH 里已有 java.exe,和 JAVA_HOME 是否设置无关
真正让 JAVA_HOME 在命令行中生效的方法
必须把变量写入系统或用户环境变量,之后新开终端才能识别:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
图形界面(推荐):按
Win + R→ 输入sysdm.cpl→「高级」→「环境变量」→ 在【系统变量】中新建JAVA_HOME,值填 JDK 根目录(如D:\tools\jdk-25.0.3,不含\bin) -
管理员 PowerShell(命令行方式):右键“开始”→“Windows Terminal(管理员)”,执行:
[Environment]::SetEnvironmentVariable("JAVA_HOME", "D:\tools\jdk-25.0.3", "Machine")
别忘了配置 PATH 并验证
仅设 JAVA_HOME 不等于能用 java 或 javac。你还得把 %JAVA_HOME%\bin 加进系统 PATH,并移到最上方(避免旧版本干扰):
立即学习“Java免费学习笔记(深入)”;
- 在「环境变量」窗口中编辑【系统变量】里的
Path - 点击「新建」,输入
%JAVA_HOME%\bin - 选中该项,点「上移」到顶部
- 关键一步:所有修改保存后,必须打开全新的 CMD 或 PowerShell 窗口验证
在新窗口中依次运行:
-
echo %JAVA_HOME%→ 应显示你设置的路径 -
where java→ 应返回%JAVA_HOME%\bin\java.exe -
java -version和javac -version→ 显示对应版本号

















