UnsupportedClassVersionError 는
실행 환경 JVM 버전보다 더 높은 버전의 Java Class 파일을 컴파일하려해서 발생한다.
각 Java Class File Version을 확인해보자.
JDK Version | Bytecode Version |
Java 1.0 | 45.0 |
Java 1.1 | 45.3 |
Java 1.2 | 46.0 |
Java 1.3 | 47.0 |
Java 1.4 | 48.0 |
Java 5 | 49.0 |
Java 6 | 50.0 |
Java 7 | 51.0 |
Java 8 | 52.0 |
Java 9 | 53.0 |
Java 10 | 54.0 |
Java 11 | 55.0 |
Java 12 | 56.0 |
Java 13 | 57.0 |
Java 14 | 58.0 |
Java 15 | 59.0 |
Java 16 | 60.0 |
Java 17 | 61.0 |
Java 18 | 62.0 |
Java 19 | 63.0 |
Java 20 | 64.0 |
Java 21 | 65.0 |
Java 22 | 66.0 |
Java 23 | 67.0 |
Java 24 | 68.0 |
각 JDK Version에 따라 Bytecode Version이 매핑된다.
배포 진행중 발생 오류였는데
로컬에서 테스트할때 사용했던 JDK Version 은 Java 22을 사용하고 있었다.
하지만 배포 환경에서는 Java 17버전을 사용하고 있었기 때문에 발생했다.
이 문제 해결은 컴파일할때 JDK Version 을 맞춰서 사용해 주어야한다.
JVM Version 확인방법
java -version
java version "22" 2024-03-19
Java(TM) SE Runtime Environment (build 22+36-2370)
Java HotSpot(TM) 64-Bit Server VM (build 22+36-2370, mixed mode, sharing)
Class 파일의 version을 확인하는 방법
따로 javap.exe 환경 변수 설정이 안되어있고
"'javap'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다."
오류가 발생하면 java 폴더 -> bin 내부에 class 파일을 추가하고 아래 명령어를 실행해주면 됩니다.
javap -verbose AdminAspect.class | find "version"
minor version: 0
major version: 65
이렇게 버전 확인을 가능하다.
728x90