Mit Prozentzeichen umschlossene Variablen funktionieren nicht als Umgebungsvariablen

Mit Prozentzeichen umschlossene Variablen funktionieren nicht als Umgebungsvariablen

Wie Sie sehen, habe ich JAVA_HOME und M2_HOME für Java und Maven definiert und dem Pfad Umgebungsvariablen hinzugefügt: Bildbeschreibung hier eingeben

Wenn ich versuche, Java- oder MVN-Befehle auszuführen, funktionieren sie in Powershell im Windows-Terminal einwandfrei.

mvn im Windows-Terminal und Powershell: Bildbeschreibung hier eingeben

Funktioniert aber nicht, wenn ich eine neue Powershell oder cmd öffne Bildbeschreibung hier eingeben

Irgendwelche Ideen, warum sie im Windows-Terminal und nicht in der eigenständigen Powershell funktionieren? Wenn die Variable nicht mit % % umschlossen ist, gibt es kein Problem, sie funktioniert einwandfrei. Im ersten Screenshot funktioniert NVM beispielsweise sowohl im Windows-Terminal als auch in der Powershell einwandfrei.

Antwort1

Es sieht so aus, als hätten Sie eine Lösung gefunden. Hier ist der Grund dafür:

Sie legen JAVA_HOMEund M2_HOMEVariablen in IhremBenutzerUmgebung, sondern fügte sie zu IhremSystemUmgebungspfad. In diesem Fall haben Sie ein Race-Condition-Problem beim Festlegen Ihrer Umgebungsvariablen. In Windows, gemäßss64:

Wenn ein neuer Prozess gestartet wird, werden die Variablen in der folgenden Reihenfolge geladen:

  • Systemumgebungsvariablen
  • Shell-Variablen (pro Benutzer)
  • Benutzerumgebungsvariablen
  • Shell-Variablen (andere)

Sie können also normalerweise nicht festlegen,BenutzerUmgebungsvariablen innerhalbSystemund lassen Sie sie richtig erweitern. Es scheint, als würde sich das neue Windows-Terminal in umgekehrter Reihenfolge verhalten oder die PATH-Erweiterung anders handhaben, aber das garantiert nicht, dass sich andere Prozesse auch so verhalten.

Achten Sie auf Folgendes:

# 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 verhält sich in beide Richtungen, je nachdem, welchen Terminaltyp Sie verwenden.


Es funktioniert einwandfrei, wenn Sie sie alle in derselben Umgebung einrichten. Also entweder:

  1. Fügen Sie JAVA_HOME/ M2_HOMEzu IhremBenutzerPATH und entfernen ausSystemPATH oder
  2. Festlegen JAVA_HOMEalsM2_HOMESystemVariablen stattdessen. (sieht aus, als ob das bei Ihnen funktioniert hat)

verwandte Informationen