Application Servers & Java

Class version is supported up to JDK 1.7 – 상위 JDK 클래스 파일 로딩 오류

midworker 2025. 5. 21. 22:40
반응형

경고 메시지

Processing the annotation of the class [...] failed but the deployment process will continue: 
java.lang.IllegalArgumentException: Class version is supported up to JDK 1.7.

오류 의미

이 메시지는 특정 클래스가 JDK 9 이상의 버전으로 컴파일된 클래스 파일임에도,
현재 애플리케이션 서버(JBoss, WildFly 등)가 JDK 8 이하만 지원하는 설정으로 실행되고 있어 발생합니다.

예시 경로

META-INF/versions/9/org/apache/logging/log4j/util/...

→ 이는 Java 9의 멀티릴리즈 JAR(Multi-Release JAR) 구조이며,
JDK 9 이상에서만 활성화되는 클래스가 포함된 것을 나타냅니다.


주요 원인

원인 설명
로그4j 등 외부 라이브러리가 JDK 9 이상으로 빌드됨 log4j-core, log4j-api 등 일부 최신 버전
현재 애플리케이션 서버는 JDK 8 이하 JBoss 7.x, WildFly 구버전 등
서버에서 멀티릴리즈 JAR을 제대로 처리 못함 META-INF/versions/9 경로 내 클래스 파싱 오류

해결 방법

1. JDK 8 이하 호환 버전의 라이브러리로 교체

예: Log4j 사용 시 다음 버전을 고려

<!-- Log4j 2.17.1 등 JDK 8 호환 버전 -->
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.17.1</version>
</dependency>

2.20.x 이상은 기본적으로 JDK 9 이상 클래스 포함됨


2. 서버를 JDK 11 이상으로 업그레이드

  • 해당 오류는 JDK 9 이상의 클래스 버전을 인식할 수 없을 때 발생
  • JBoss / WildFly가 지원하는 범위 내에서 JDK 업그레이드 고려

3. 멀티릴리즈 JAR 비활성화 (실험적)

빌드 툴(Maven, Gradle 등)에서 멀티릴리즈 JAR로 생성되지 않도록 제어하거나
배포 전 JAR 내부에서 META-INF/versions/ 폴더를 제거

zip -d log4j-core-2.x.x.jar "META-INF/versions/*"

⚠️ 권장 방식은 아님. 되도록 JDK 호환성 맞는 버전으로 교체하세요.


결론

이 오류는 클래스 파일 버전(JDK 컴파일 버전) 불일치로 인해 발생하는 문제입니다.
멀티릴리즈 JAR을 사용하는 라이브러리는 현재 서버 환경(JDK 7/8)과 호환되는 버전으로 교체하는 것이 가장 안정적인 해결책입니다.


반응형