티스토리 뷰
어플리케이션 실행 시 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 |
출처 : https://javaalmanac.io/bytecode/versions/
각 JDK Version에 따라 오른쪽과 같은 Bytecode Version이 매핑된다. 내가 사용하는 JDK version은 어떤 Bytecode Version 인지 정도 기억을 해 두자.
내가 어떤 JVM을 사용하는지, 그리고선 오류가 나는 class 파일의 version을 살펴보도록 하자.
어떤 JVM을 사용하는지는 cmd에서 다음과 같은 방법으로 확인할 수 있다.
> java -version
class 파일의 version을 확인하는 방법은 다음과 같은 방법으로 확인할 수 있다.
> javap -verbose [class파일의 전체경로]
C:\project\workspace\demo\target\classes\com>javap -verbose DemoApplication.class
Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
Classfile /C:/project/workspace/demo/target/classes/com/DemoApplication.class
Last modified 2021. 3. 18; size 831 bytes
MD5 checksum 6d7853e1df0d4f89e40ff2ce0b6cb09a
Compiled from "DemoApplication.java"
public class com.DemoApplication
minor version: 0
major version: 55
flags: ACC_PUBLIC, ACC_SUPER
이렇게 확인을 해보면 9 line의 major version: 55 를 확인할 수 있는데 이것은 class파일이 생성될 때 jdk11을 사용해서 생성이 되었다는 것이다. 따라서 실행시키려는 jvm은 이것보다는 높거나 같은 version이어야 한다.
끝!
'Lang > Java' 카테고리의 다른 글
hs_err_pid 파일은 언제 왜 생성이 되는것일까? (0) | 2021.11.29 |
---|---|
An illegal reflective access operation has occurred 오류 조치 - 2 (0) | 2021.11.26 |
Java Application Process ID (pid) 확인하기 (0) | 2021.11.18 |
Summer Time API 로 가져오기 (w. WorldTime API) (0) | 2021.10.19 |
JAVA 실행시 Picked up JAVA_TOOL_OPTIONS 뜻, 그리고 설정방법 (1) | 2021.10.18 |
댓글