如您所见,我为 java 和 maven 定义了 JAVA_HOME 和 M2_HOME,并将其添加到路径环境变量中:
当我尝试执行 java 或 mvn 命令时,它们在 Windows 终端中的 powershell 中运行良好。
Windows 终端和 powershell 中的 mvn:
但如果我打开一个新的 powershell 或 cmd 则不起作用
知道为什么它们在 Windows 终端中工作而不是在独立的 powershell 中工作吗?如果变量没有被 % % 包裹,那么就没有问题,工作正常。例如,在第一个屏幕截图中,nvm 在 Windows 终端和 powershell 中都运行良好。
答案1
看起来你找到了解决方案,但发生这种情况的原因如下:
您设置JAVA_HOME
和M2_HOME
变量用户环境,但将它们添加到您的系统环境 PATH。在这种情况下,您在设置环境变量时遇到了竞争条件问题。在 Windows 中,根据SS64:
当启动新进程时,变量将按以下顺序加载:
- 系统环境变量
- Shell 变量(每个用户)
- 用户环境变量
- Shell 变量(其他)
因此你通常无法设置用户里面的环境变量系统并让它们正确扩展。看起来新的 Windows 终端可能会以相反的顺序运行或以不同的方式处理 PATH 扩展,但这并不能保证其他进程也会如此。
以下是需要注意的事项:
# Powershell (core 7.2) terminal:
PS C:\Users\username> $env:path
C:\Program Files\PowerShell\7;%JAVA_HOME%;
# ^Bad, not expanded
# Windows Terminal, running Powershell 7.2:
PS C:\Users\username> $env:path
C:\Program Files\PowerShell\7;C:\Program Files\JavaFolder\jre\bin;
# ^Good
VS Code 将会以任意一种方式运行,具体取决于您使用的终端类型。
如果将它们全部设置在相同的环境中,则可以正常工作,因此可以:
- 添加
JAVA_HOME
/M2_HOME
到您的用户PATH 并从中删除系统PATH,或 - 设置
JAVA_HOME
M2_HOME
系统变量。(看起来这对你有用)