UnsupportedClassVersionError는 실행 중인 Java 런타임이 읽을 수 없는 상위 버전으로 컴파일된 클래스를 불러올 때 발생하는 오류이다. 전체 메시지는 java.lang.UnsupportedClassVersionError: ... has been compiled by a more recent version of the Java Runtime (class file version XX.0), this version of the Java Runtime only recognizes class file versions up to YY.0 형태이다.

26.1부터 마인크래프트가 Java 25를 요구하면서 이 오류를 겪는 사례가 늘었다.

클래스 파일 버전 대응표

메시지의 class file version 숫자로 필요한 Java 버전을 알 수 있다.

클래스 파일 버전 필요한 Java
52.0 Java 8
55.0 Java 11
61.0 Java 17
65.0 Java 21
69.0 Java 25

class file version 69.0이 보이는데 recognizes ... up to 65.0이라면, Java 21로 Java 25용 파일을 실행하려 한 것이다.

해결

  1. java -version으로 실제 실행에 쓰이는 Java 버전을 확인한다.
  2. 필요한 버전의 JDK를 설치한다.
  3. 시스템에 여러 Java가 설치되어 있다면 서버 실행 스크립트에서 절대 경로로 지정한다.
/usr/lib/jvm/java-25-openjdk-amd64/bin/java -Xms8G -Xmx8G -jar paper.jar --nogui

리눅스에서는 update-alternatives --config java로 기본 Java를 바꿀 수 있다. 다만 다른 서비스에 영향을 줄 수 있으므로, 서버 실행 스크립트에서 경로를 지정하는 편이 안전하다.

플러그인에서 발생하는 경우

서버는 정상 구동되는데 특정 플러그인 적재 시에만 나타난다면, 그 플러그인이 서버보다 높은 Java 버전으로 빌드된 것이다. 플러그인의 요구 사항을 확인하고, 서버 Java를 올리거나 해당 플러그인의 하위 버전을 사용한다.

같이 보기