
Как видите, я определил JAVA_HOME и M2_HOME для java и maven и добавил к пути переменные окружения:
Когда я пытаюсь выполнить команду java или mvn в PowerShell в терминале Windows, они работают нормально.
mvn в терминале Windows и PowerShell:
Но не работает, если я открываю новый PowerShell или cmd
Есть идеи, почему они работают внутри терминала Windows, а не отдельного PowerShell? Если переменная не обернута в % %, то проблем нет, работает нормально. Например, на первом скриншоте nvm работает нормально и в терминале Windows, и в PowerShell.
решение1
Похоже, вы нашли решение, но вот причина, по которой это происходит:
Вы устанавливаете JAVA_HOME
и M2_HOME
переменные в вашемпользовательсреда, но добавили их в свойсистемаокружение PATH. В этом случае у вас проблема состояния гонки при установке переменных окружения. В Windows, согласносс64:
При запуске нового процесса переменные будут загружены в следующем порядке:
- Системные переменные среды
- Переменные оболочки (на пользователя)
- Переменные среды пользователя
- Переменные оболочки (другие)
Поэтому обычно вы не можете установитьпользовательпеременные среды внутрисистемаи заставить их правильно расширяться. Похоже, что новый Windows Terminal может вести себя в обратном порядке или обрабатывать расширение 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 и удалить изсистемаПУТЬ, или - Установить
JAVA_HOME
/M2_HOME
каксистемавместо этого переменные. (похоже, это сработало для вас)