Переменные, заключенные в знак процента, не работают как переменные окружения

Переменные, заключенные в знак процента, не работают как переменные окружения

Как видите, я определил 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 будет вести себя по-разному, в зависимости от того, какой тип терминала вы используете.


Все будет работать нормально, если вы установите их все в одной среде, поэтому:

  1. Добавить JAVA_HOME/ M2_HOMEк вашемупользовательPATH и удалить изсистемаПУТЬ, или
  2. Установить JAVA_HOME/ M2_HOMEкаксистемавместо этого переменные. (похоже, это сработало для вас)

Связанный контент