
보시다시피 java 및 maven에 대해 JAVA_HOME 및 M2_HOME을 정의하고 환경 변수 경로에 추가했습니다.
java 또는 mvn 명령을 실행하려고 하면 Windows 터미널의 powershell에서 제대로 작동합니다.
Windows 터미널 및 Powershell의 mvn:
하지만 새 powershell이나 cmd를 열면 작동하지 않습니다.
독립형 Powershell이 아닌 Windows 터미널 내부에서 작업하는 이유에 대한 아이디어가 있습니까? 변수가 %%로 래핑되지 않으면 문제가 없으며 정상적으로 작동합니다. 예를 들어 첫 번째 스크린샷에서 nvm은 Windows 터미널과 Powershell 모두에서 잘 작동합니다.
답변1
해결책을 찾은 것 같지만 문제가 발생하는 이유는 다음과 같습니다.
당신은 JAVA_HOME
당신 M2_HOME
의사용자환경에 추가했지만체계환경 경로. 이 경우 환경 변수 설정 시 경쟁 조건 문제가 발생합니다. Windows에서는 다음과 같이 말합니다.SS64:
새 프로세스가 시작되면 변수는 다음 순서로 로드됩니다.
- 시스템 환경 변수
- 쉘 변수(사용자별)
- 사용자 환경 변수
- 쉘 변수(기타)
그래서 일반적으로 설정할 수 없습니다사용자내부 환경변수체계올바르게 확장되도록 하세요. 새로운 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 및 제거체계경로 또는JAVA_HOME
로 설정M2_HOME
체계대신 변수. (이것이 당신에게 효과가 있었던 것 같습니다)