코딩공부/기타

java.lang.UnsupportedClassVersionError 원인 및 해결 방법

내일의기대 2023. 12. 9. 02:09

 

본 글에서는 java.lang.UnsupportedClassVersionError의 발생 원인과 해결 방법을 설명합니다. 
결론적으로 말하자면 실행한 class 파일이 실행환경의 java 버전보다 높은 환경에서 컴파일돼서 입니다. 이를 해결 하기 위해서는 1) java 버전을 높이거나 2) class를 포함하는 jar 파일을 낮은 java 버전으로 다시 컴파일 하면 됩니다.

1. 오류 발생 원인
제가 해당 에러를 찾아본 이유는 외부에서 개발해서 넘겨준 jar파일을 classpath에 추가하여 포함된 함수를 호출하였는데 발생해서 입니다. 

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/example/versionerr 
  has been compiled by a more recent version of the Java Runtime (class file version 55.0), 
  this version of the Java Runtime only recognizes class file versions up to 52.0

위와 같은 에러를 만났는데, 에러 로그에서 원인을 모두 설명하고 있습니다. com/example/versionerr 클래스가 최신 java runtime에서 컴파일 됐으며 (55버전) 현재 실행하는 자바는 52버전임을 알 수 있습니다. 즉 실행하는 자바가 버전이 너무 낮다는 이야기 입니다. 다른말로 하면 컴파일된 자바 버전이 너무 높다는 이야기가 되겠죠.

다음은 Version 넘버와 자바 버전의 매핑 입니다. Version 넘버에서 - 44하면 자바 버전을 알 수 있습니다.

Version 넘버 자바 버전
45 Java 1.1
46 Java 1.2
47 Java 1.3
48 Java 1.4
49 Java 5
50 Java 6
51 Java 7
52 Java 8
53 Java 9
54 Java 10
55 Java 11
56 Java 12
57 Java 13
58 Java 14
59 Java 15
60 Java 16
61 Java 17
62 Java 18
63 Java 19
64 Java 20
65 Java 21
66 Java 22
67 Java 23

2. 원인 해결
해결 방법은 간단합니다.  1) java 버전을 높이거나 2) class를 포함하는 jar 파일을 낮은 java 버전으로 다시 컴파일 하면 됩니다.

2.1 java 버전 높이기
- Java를 더 높은 버전으로 설치하고 JAVA_HOME을 바꾸어 실행하는 Java 교체

2.2 낮은 java로 컴파일 하기
제가 해결한 방법입니다. 외부 업체에 자바 8로 다시 컴파일 해달라고 부탁드렸습니다. 낮은 java로 컴파일 하는 방법은 java 구버전을 설치하고 컴파일 환경(커맨드라인, IDE 설정, Maven 설정)에 자바를 구버전으로 명시하는 것입니다. 다음은 Maven compiler plugin에 자바 버전을 명시하는 예제입니다.

<plugins>
    <plugin>    
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
</plugins>

 

참고자료
더 자세한 설명을 알고 싶으면 아래 링크를 확인하시면 됩니다.
https://www.baeldung.com/java-lang-unsupportedclassversion