문제
인텔리제이의 Spring Initializr를 이용해서 JDK 21을 사용하는 스프링부트 프로젝트를 생성했다.
생성할 때 JDK도 잘 설정해 주었는데, 프로젝트 생성 후 서버를 띄워보려고 하니 다음의 에러가 발생하며 컴파일이 되지 않았다.
원인
원인을 찾아보자. 일단 Java 21을 지원하는 Gradle 버전을 찾아본다.
https://docs.gradle.org/8.4/release-notes.html#support-for-building-projects-with-java-21
Gradle 8.4 버전부터 Java 21을 지원한다.
gradle --version
위에 보이는 것 처럼, 컴퓨터에 설치된 gradle 버전은 Gradle 8.0.2
로 확인된다. 버전이 낮기 때문에 얼핏 보면 설치된 Gradle 버전이 문제네! 할 수 있겠지만 스프링부트 프로젝트는 시스템에 설치된 Gradle과 상관 없이 프로젝트에 따라 Gradle Wrapper(gradlew)를 사용한다는 것이다. 연관이 없다.
그럼 이번엔 gradlew를 확인해보자.
./gradlew --version
gradlew는 Gradle 8.5
로 확인된다. 문제가 없다.
그런데 위와 아래에서 공통적으로 나오는 것이 있으니 JVM이 17.0.8
인 것이 눈에 띈다.
그렇다, gradle 버전이 어떻든간에 빌드할 때 내 시스템에 설치된 JVM이 제 역할을 해줘야 한다.
해결
JVM 버전을 최신으로 업데이트 해주자.
방법은 모두 다르겠지만, 나는 SDK 를 사용하기 때문에 아래의 순서로 자바 버전을 변경했다.
sdk list java
sdk install java 21.0.1-tem
sdk default java 21.0.1-tem
이후 java --version
을 입력하면 새로 설치된 자바 버전이 잘 표기된다.
이렇게 한 후에 빌드를 해보면 문제 없이 되는걸 확인할 수 있다.
./gradlew clean build
하지만 IDE에서는 여전히 실행이 되지 않았는데 이때는 인텔리제이의 Gradle 설정을 확인해야한다.
Settings
> Build, Execution, Deployment
> Build Tools
> Gradle
그러면, Gradle의 Distribution은 Wrapper로 잘 설정이 되어 있지만, Gradle JVM 설정이 변경되지 않은것을 볼 수 있다. 이걸 변경해주면 된다.
설정을 변경 한 후에 다시 서버를 띄워보면
문제 없이 실행되는 것을 확인할 수 있다.
끝
References
'Development > Daily Error' 카테고리의 다른 글
Svelte kit 개발할때 implicitly has an any type 경고 끄기 (0) | 2024.01.26 |
---|---|
Unable to load io.netty.resolver.dns.macos 에러 해결 (0) | 2024.01.14 |
Apache Commons net 한글 파일명 문제 해결 (0) | 2024.01.10 |
[Nginx] 413 Request Entity Too Large 문제 해결 (0) | 2023.12.19 |
[Java] Base64 디코딩 중 Illegal base64 character a 에러 해결 (2) | 2023.12.02 |