마이의 개발 블로그

[Spring] Java 버전 차이로 인한 빌드 오류 해결 (IntelliJ) 본문

개발지식/Spring

[Spring] Java 버전 차이로 인한 빌드 오류 해결 (IntelliJ)

개발자마이 2023. 3. 22. 13:11
반응형

문제의 발단

나는 스프링을 사용하여 포트폴리오를 만들기도 했고 현업에서 프로젝트에 투입되어 업무를 수행한 경험도 있지만 스프링을 깊게 알지는 못한다(시간이 꽤 걸리는 작업이라는 생각이 든다). 그래서 최신 버전의 스프링 부트를 다시 학습하고 이왕이면 자바 버전도 좀 올려서 공부해보려고 공식문서를 따라 예제 프로젝트를 진행해보는 중이다. 이번에는 IDE를 STS가 아닌 인텔리제이로 바꿨고 빌드 도구도 Maven이 아닌 Gradle로 변경했다. 그러나 공식문서대로 설정 후 프로젝트를 빌드하려는데 다음과 같은 내용의 빌드 실패 메시지를 보게되었다.

자바 타겟 버전과 실행 버전이 달라 생기는 문제인데 스프링부트 3.x 버전에서는 Java17 이상 버전을 필요로 하기에 스펙에 맞춰 JDK를 설치하고 인텔리제이에서도 관련된 설정을 모두 마친 상태였음에도 이런 오류가 발생하였고, 해결책으로 제시된 자료들을 다 적용해봤지만 무용지물이였다. 기존에 환경변수에 설정된 Java8을 제거하고 Java17로 경로를 변경해서 사용하면 되는 문제이긴 했으나 기존 프로젝트때문에 가급적이면 환경변수를 안 건드리고 프로젝트에만 세팅해서 Java17을 사용하고 싶었는데 원하는 방식으로 잘 해결되지 않은 것. 실제로 나와 비슷한 사례들을 스택 오버플로우에서도 종종 볼 수 있었다.

 

해결방법

아래의 SDKMAN을 이용한 버전 관리를 시도하였으나 실패했고, 내가 원하는 버전의 JDK를 편하게 쓰려면 환경변수를 바꾸는 게 가장 빠른 방법이라는 결론에 도달하게 되었다.

실행 후에도 80%에 멈춰있는 건 원래 그렇다고 함. 동작은 제대로 된다.


SDKMAN을 이용한 자바 버전 변경 (보류)

Node에서는 Node Version Manager(NVM)을 이용하면 손쉽게 버전 변경이 가능하다. 자바는 버전 변경할 일이 노드보다 적어서 그런지 몰라도 보통은 환경변수에서 직접 폴더를 바꿔주는 방식이 많이 소개되던데 나는 이걸 좀 더 간편하게 하기 위해 툴을 찾아봤다. 그 중 SDKMAN의 사용이 간편해보여 사용법을 소개하고자 한다(Windows + IntelliJ 기준).

 

1. Git Bash 설치 후 터미널 Git Bash로 변경 (공식홈페이지에서 다운로드 후 설치)

2. 터미널 명령어 입력을 통한 SDKMAN 설치

2-1. zip이 없어 아래와 같은 에러 메시지가 나오는 경우 이 해결법을 참조하여 zip을 설치

3. Java 설치 (설치되어 있는 경우 스킵)

- 최신 버전 설치 명령어

$ sdk install java

- 버전 명시하는 경우 명령어

$ sdk install scala 3.2.2

- 제거 명령어

$ sdk uninstall scala 3.2.2

- 버전 리스트 보기

$ sdk list

 

SDKMAN 문제점

설치 및 버전확인까지 완료하였으나 막상 사용하려니 현재 인스톨 되어있는 자바 버전을 가지고 올 수가 없고, 내가 원하는 벤더의 자바 버전을 설치할 수 없다는 한계를 발견하게 되었다. 나는 스프링에서 권장하는 JDK버전인 BellSoft Liberica JDK version 17을 설치하고자 하였는데 $ sdk list java 명령어를 입력하여 확인한 설치 가능 버전들은 아래 스크린샷과 같았던 것. 

명령어로 직접 설치를 시도하면 아래와 같은 오류메시지가 반환된다. 일단은 그냥 환경 변수 바꿔서 내가 원하는 버전 쓰는게 훨씬 속편할 것 같다.

반응형
Comments