변경 후 새 터미널을 열었는지 확인
만약 기존에 열려 있던 콘솔(심지어 Windows Terminal/IntelliJ/VSCode 등 포함)에서는 변경 내용이 반영되지 않습니다.
당연히 JDK 19와 24 모두 설치되어 있는 "상태"지만, 중요한 것은 gradle이 실제로 어떤 java.exe(=JDK)를 참조하냐입니다.
지금 시스템 상태 정리
JAVA_HOME은 JDK 19로 정상 세팅됨!
하지만 PATH의 우선순위에 JDK 24가 더 앞에 있어서, cmd/powershell의 기본 java/javac은 여전히 JDK 24를 사용합니다.
gradlew.bat는 JAVA_HOME이 정의되어 있으면 무조건 C:\Program Files\Java\jdk-19\bin\java.exe 를 이용해서 gradle을 실행합니다.
지금 오류 메시지와 [DEBUG] 상태
gradle 실행 당시 JAVA_HOME이 비어 있었거나,
파워셸에서는 잡혔는데, gradlew 실행 환경에서는 인식이 안 된 것으로 보입니다.
여러 JDK가 설치되어 있어도 상관없음
JAVA_HOME만 JDK 19로 정확히 잡혀 있으면 gradle 빌드는 무조건 JDK 19로 동작해야 합니다.
기본 java 명령(커맨드라인)에서 24가 출력되는 것은 "Path에서 JDK 24가 먼저 나오는 것"일 뿐, gradle 빌드와 직접적 관련 없음!
그런데도 계속 JRE 1.8/tools.jar 에러가 난다면?
원인
"JAVA_HOME이 gradlew 빌드 실행 시점/환경에 정확하게 전파되지 않는 것"
gradle의 gradle.properties 등 어딘가에서 org.gradle.java.home가 강제 지정된 것
Check List
JAVA_HOME을 시스템 변수로 등록 후 PC를 '완전히' 재시작
간혹 환경변수가 시스템 전체(session)에 반영되지 않아 꼬일 때가 있습니다.
재부팅 강력 추천!
PowerShell/명령프롬프트 창을 '반드시 새 창'에서 실행
gradlew.bat에 디버그 코드 넣고 '실행 후 바로 출력'을 확인 (이미 위에서 해봤지만, 재부팅 후 재확인)
gradle.properties 어디에도 org.gradle.java.home 등이 남아있는지 반드시 검색!
프로젝트 루트
C:\Users\-\.gradle\gradle.properties (사용자 홈 아래!!)
PATH에서 JRE 1.8, javapath가 너무 앞쪽에 있으면, JAVA_HOME 인식이 꼬일 수 있으니, 아래로 내리기
(그래도 gradlew는 JAVA_HOME만 사용함)
PATH의 앞쪽에 JRE만 들어있으면, gradlew.bat이 JAVA_HOME이 없을 때 이걸 우선 찾기도 함
그러나 지금은 JAVA_HOME이 정의되어 있으니 이론적으로 문제가 없어야 정상입니다.
[System.Environment]::GetEnvironmentVariable("JAVA_HOME", "Machine")
[System.Environment]::GetEnvironmentVariable("JAVA_HOME", "User")
echo $env:JAVA_HOME
C:\Program Files\Java\jdk-19로 나와야 합니다.cd C:\Users\kah\Documents\energy-keeper-app\Backend\energykeeper
echo $env:JAVA_HOME
.\gradlew.bat build -PbuildFrontend=true
[DEBUG] JAVA_HOME=...이 JDK 19로 찍히고 있는지 확인하세요.C:\Users\kah\.gradle\gradle.properties (사용자 홈폴더)<프로젝트폴더>/gradle.propertiesorg.gradle.java.home=...이 있으면 꼭 주석처리(#)하거나 삭제하고 재 시도!환경변수 수정 후 모든 터미널/IDE를 종료하고 “완전히 새로 열린” 창에서만 시도!
gradlew.bat 내 [DEBUG] JAVA_HOME이 JDK 19로 출력되는지 꼭 확인!
그래도 안 되면 gradle.properties에서 org.gradle.java.home 존재 검사!
필요할 경우 윈도우 재부팅까지!
cmd에서는 JAVA_HOME이 제대로 반영되고 빌드가 잘 되는데, powershell에서는 예상과 다른 자바가 계속 실행되는 상황
PowerShell에서 echo $env:JAVA_HOME은 분명히 올바른 JDK 19 경로를 반환하고 있습니다.
그러나, powershell의 환경변수 동기화나, 실행 환경 자체(예: "사용자"가 아닌 "시스템" 환경변수만 인식 또는 세션 캐싱 현상)로 인해 javac/java 실행 경로가 기대와 다르게 동작할 수 있습니다.
이럴 때는 PATH 우선순위와 javapath 심볼릭 링크가 자주 영향을 미치곤 합니다.
Windows는 cmd, powershell, IDE 등이 각각 환경 변수 값을 "처음 열린 시점"의 값으로 로드합니다.
환경 변수를 변경한 후 기존 창을 그대로 두면, 이전 세션의(캐시된) 환경변수를 계속 사용합니다.
반드시 모든 파워셸 창을 종료했다가 새로 여세요!
echo $env:JAVA_HOME
java -version
javac -version
모두 JDK 19로 출력되어야 정상입니다.
Get-Command java
Get-Command javac
or
where java
where javac
C:\Program Files\Java\jdk-19\bin\ 쪽으로 나와야 확실합니다.PATH 환경변수 우선순위를 "시스템 PATH"에서 JDK 19 bin이 javapath보다 위로 가게 조정해보세요.
추가로, 파워셸 세션에서 다음 명령을 실행해 임시로 명확하게 지정할 수 있습니다.
$env:JAVA_HOME = 'C:\Program Files\Java\jdk-19'
$env:Path = "C:\Program Files\Java\jdk-19\bin;" + $env:Path
java -version, javac -version 확인!cmd와 powershell이 다르게 동작하는 것은 윈도우 환경변수 세션 적용 순서 및 PATH 우선순위 문제 때문입니다.
PowerShell 세션을 꼭 재시작해야 환경변수 변경이 반영됩니다.
Path 우선순위 확인, 필요시 JDK bin 경로를 최상단으로!
여전히 문제 있을 때는 경로 그대로 추가해서 강제 셋팅 가능!
ps. 난 그냥 다 지우고 다시 깜... 하나 밖에 안 써서...