Application Servers & Java

java.lang.IllegalArgumentException: Class version is supported up to JDK 1.7

midworker 2025. 5. 19. 22:31
반응형

JVM 실행 시 다음과 같은 오류가 발생하며 애플리케이션이 정상 기동되지 않는 경우가 있습니다.


에러 메시지

java.lang.IllegalArgumentException: Class version is supported up to JDK 1.7

원인 분석

이 에러는 클래스 파일(.class)의 버전이 현재 실행 중인 JVM이 인식할 수 있는 범위를 초과했을 때 발생합니다.

즉,

  • 컴파일된 클래스 파일이 더 최신 JDK로 빌드되었고,
  • 실행 중인 JVM은 그보다 낮은 버전일 때 발생합니다.

예를 들어:

컴파일 환경 (javac) 실행 환경 (java) 발생 가능성
JDK 11 JDK 7 ✅ 오류 발생
JDK 8 JDK 8 ❌ 정상 작동
JDK 7 JDK 11 ✅ 정상 작동 (상위 호환)

클래스 버전 대응표

Class Version JDK 버전
51.0 JDK 7
52.0 JDK 8
53.0 JDK 9
54.0 JDK 10
55.0 JDK 11
56.0 JDK 12
... ...

※ 오류 메시지에서 "지원은 JDK 1.7까지"라고 나온 경우 → JVM은 Class Version 51.0까지 지원


해결 방법

1. JDK 버전 맞추기

  • 실행 중인 JVM 버전을 업그레이드하세요.
  • 예: JDK 11로 컴파일한 클래스는 최소 JDK 11로 실행해야 함
java -version
javac -version

2. 컴파일 시 --target 옵션 명시

빌드 시 하위 호환을 유지하고 싶다면, 컴파일 시점에 --release, -target, -source 옵션을 사용하세요.

예:

javac --release 8 MyApp.java

또는

javac -source 1.7 -target 1.7 MyApp.java

Gradle 예:

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}

Maven 예:

<properties>
  <maven.compiler.source>1.7</maven.compiler.source>
  <maven.compiler.target>1.7</maven.compiler.target>
</properties>

결론

이 에러는 "컴파일러는 최신, 실행기는 구버전"일 때 가장 흔히 발생합니다.
Java의 클래스 파일은 하위 버전에서 상위 버전 클래스 파일을 읽을 수 없습니다.

애플리케이션을 실행할 환경의 JVM 버전과 클래스 파일을 생성한 컴파일러 버전이 호환되는지 반드시 확인해야 합니다.


반응형