본문 바로가기
Development/Java

[자바] java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 51.0 (자바 버전 오류)

by 버들도령 2022. 7. 23.
728x90

[자바] java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 51.0
(자바 버전 오류)

Java로 실행하려고 할때
다음과 같은 오류가 발생하시나요?

java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 51.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
	at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301
 at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
 Exception in thread "main"

 

오류의 표현대로 원인은

major.minor version 51.0을 지원하지 않는다.

 

본인이 사용하는 Java SE 버전에 따라서
오류에 표시되는 major.minor version은 달라질 수 있습니다.
아래와 같은 오류 내용일테지요.

java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 45.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 46.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 47.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 48.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 49.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 50.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 51.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 52.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 53.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 54.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 55.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 56.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 57.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 58.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 59.0
java.lang.UnsupportedClassVersionError: AsyncService : Unsupported major.minor version 60.0

 

그렇다면 major.minor version은 무엇일까요?
아래의 표를 참고하시면 이해하기가 조금 쉬울겁니다.

Java SE Released Major Supported majors
JDK 1.0.2 May 1996 45 45
JDK 1.1 February 1997 45 45
JDK 1.2 December 1998 46 45 ~ 46
JDK 1.3 May 2000 47 45 ~ 47
JDK 1.4 February 2002 48 45 ~ 48
Java SE 5.0 September 2004 49 45 ~ 49
Java SE 6 December 2006 50 45 ~ 50
Java SE 7 July 2011 51 45 ~ 51
Java SE 8 March 2014 52 45 ~ 52
Java SE 9 September 2017 53 45 ~ 53
Java SE 10 March 2018 54 45 ~ 54
Java SE 11 September 2018 55 45 ~ 55
Java SE 12 March 2019 56 45 ~ 56
Java SE 13 September 2019 57 45 ~ 57
Java SE 14 March 2020 58 45 ~ 58
Java SE 15 September 2020 59 45 ~ 59
Java SE 16 March 2021 60 45 ~ 60
Java SE 17 September 2021 61 45 ~ 61

Java Virtual Machine Specification
Chapter 4. The class File Format
https://docs.oracle.com/javase/specs/jvms/se17/html/jvms-4.html#jvms-4.1-200-B.2

 

Chapter 4. The class File Format

Attributes are used in the ClassFile, field_info, method_info, Code_attribute, and record_component_info structures of the class file format (§4.1, §4.5, §4.6, §4.7.3, §4.7.30). For all attributes, the attribute_name_index item must be a valid unsigne

docs.oracle.com

 

Unsupported major.minor version 51.0 문제의 원인은
java 1.7 컴파일러로 컴파일된 클래스를
더 낮은 JRE 실행 버전(ex: JRE 1.6 또는 JRE 1.5)으로 실행하려고 할때 발생합니다.

예를 들면
Java SE7로 컴파일 된 클래스를
Java SE6으로 실행하려고 하면 아래와 같은 오류가 뜰겁니다.
java.lang.UnsupportedClassVersionError: 클래스명 : Unsupported major.minor version 51.0

또 다른 예로
Java SE8로 컴파일 된 클래스를
Java SE7으로 실행하려고 하면 아래와 같은 오류가 뜨겠죠.
java.lang.UnsupportedClassVersionError: 클래스명 : Unsupported major.minor version 52.0

컴파일 한 Java 버전보다
높은 버전의 JRE로 실행할때는 문제가 없지만,
낮은 버전으로 실행할때는 Unsupported major.minor version xx.0 과 같은 오류가 발생하는 것 입니다.


이제 문제의 원인을 알았으니 해결방법을 찾으면 되겠죠?

① Eclipse IDE를 사용하신다면
해당하는 프로젝트를 선택하시고, 마우스 오른쪽 버튼을 눌러서 나타나는 메뉴에서 속성(Properties)를 선택합니다.

② Java Compiler 메뉴에서
JDK Compliance 영역의 JDK 컴파일러 버전을 선택해준 후 'OK' 버튼을 클릭해줍니다.

 

Eclipse Run Configurations...

① Eclipse의 주 메뉴에서 실행(Run) 메뉴를 클릭하여 나타나는 풀 다운 메뉴에서 실행 환경(Run Configurations...) 메뉴 선택

 

② JRE 탭을 선택 후 Runtime JRE 버전에서 원하는 JRE 버전을 선택해 준 후 Run 버튼을 클릭합니다.

 

728x90

댓글