공부를 하거나 자료를 참고할 때, 오래된 버전의 Java와 Spring으로 작성된 소스 코드를 열어봐야 하는 경우가 있다. 이때, 소스 코드가 바로 실행되지 않을 수 있다.
Execution failed for task ':compileJava'.
Could not target platform: 'Java SE 11' using tool chain: 'JDK 8 (1.8)'.
- Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
이와 비슷한 오류가 발생하였다. 이는 Java 버전 불일치로 인해 실행되지 않는 경우였다.
이제 이를 해결해 보겠다.
필자는 java 17, spring 3.xx 버전을 사용하기에 이 버전으로 환경을 바꿔보려한다.

의존성을 제외한 부분을 교체해보자. 필자가 최근에 사용한 프로젝트 파일의 build.gradle에서 그대로 복붙해본다.

이 상태에서도 당연히 에러가 발생한다. 이는 Java 8을 요구하는 패키지에 Java 17과 Spring 3.3 환경을 복사하여 붙여넣었기 때문이다. 계속해서 수정해보겠다.

이 부분 역시 최근에 사용한 프로젝트 파일 그대로 복붙해본다.
복붙완료. (java와 gradle의 버전을 맞춰줌)
이 상태에서도 에러가 발생하는데, 이번에는 IntelliJ에서 JDK 버전을 변경해보자.
윈도우 기준
File- Settings -Build Tools- gradle

Gradle JVM을 Java17 버전으로 바꾸자.

교체 완료.
환경 버전을 수정한 후에는 반드시 이러한 에러가 발생할 확률이 높다.
error: package javax.validation.constraints does not exist
import javax.validation.constraints.NotEmpty;
Java EE(Enterprise Edition)가 Oracle에서 Eclipse Foundation으로 이관되면서 큰 변화가 있었다. Oracle이 'javax' 패키지명에 대한 상표권을 보유하고 있어 새로운 네임스페이스가 필요해졌고, 그 결과 Java EE API와 관련된 javax. 패키지들이 jakarta.로 변경되었다. 예를 들어, javax.servlet.은 jakarta.servlet.로 바뀌었다.
이 변경사항은 Jakarta EE 9 버전부터 적용되었으며, 기존에 javax 패키지를 사용하던 애플리케이션들은 마이그레이션이 필요하게 되었다.
주의할 점은 모든 javax가 jakarta로 변경된 것은 아니라는 점이다. Java SE의 일부인 javax.swing 등은 그대로 유지되었다.
Java 생태계가 인도네시아와 관련된 이름을 참 좋아하는듯 ..
'Java' 언어명은 인도네시아의 자바 섬에서, 'Jakarta'는 인도네시아의 수도에서 따왔다.

이런식으로 수정을 javax -> jakarta로 수정 하여야함. (생각보다 손이 많이 간다..)
아무튼 여기까지 하면 java8로 만들어진 프로젝트를 java17로 실행이 가능하다.