오류 메시지 안에 이미 답이 들어 있어. 거기에 class file version 65.0이라고 나오면, 그 파일은 Java 21을 요구해. 계산은 항상 같아. 숫자에서 44를 빼면 Java 버전이 나와. 하지만 숫자보다 더 중요한 건 누구의 파일인지야. 대부분의 경우 서버가 너무 오래된 게 아니라, 특정 플러그인 하나가 너무 최신인 경우야.
메시지 읽기
전형적인 줄은 이렇게 생겼어.
java.lang.UnsupportedClassVersionError: com/example/PluginMain has been compiled by a more
recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime
only recognizes class file versions up to 61.0
여기에는 세 가지 정보가 들어 있어.
com/example/PluginMain— 누가 오류를 일으켰는지. 여기에 플러그인이나 모드 이름이 나오면, 그 파일 하나가 맞지 않는다는 뜻이고 서버 자체는 괜찮아.class file version 65.0— 무엇이 필요한지: 65 − 44 = Java 21.only recognizes … up to 61.0— 현재 무엇이 실행 중인지: 61 − 44 = Java 17.
즉, Java 21용으로 만들어진 플러그인이 Java 17로 실행되는 서버에 올라가 있는 상태야.
변환 표
| class file version | Java 버전 |
|---|---|
| 52.0 | Java 8 |
| 55.0 | Java 11 |
| 60.0 | Java 16 |
| 61.0 | Java 17 |
| 65.0 | Java 21 |
| 69.0 | Java 25 |
이 숫자들은 공식 JVM 사양에서 나온 거야. Java 1.0 이후로 44라는 차이는 계속 일정해. 그래서 앞으로 나오는 버전도 표를 늘리지 않고 직접 계산할 수 있어.
기억해 둬: Java 런타임은 항상 이전 클래스 파일 버전은 이해하지만, 더 새로운 버전은 절대 이해하지 못해. 그래서 Java 8 플러그인은 Java 21에서 문제없이 실행되지만, 반대는 절대 안 돼.
어떤 Minecraft 버전에 어떤 Java 버전이 필요할까?
| Minecraft 버전 | 필요한 Java |
|---|---|
| 1.16.5까지 | Java 8 |
| 1.17 – 1.17.1 | Java 16 (실제로는 Java 17) |
| 1.18 – 1.20.4 | Java 17 |
| 1.20.5부터 | Java 21 |
| 26.0부터 | Java 25 |
game-serverhosting에서는 네가 직접 설정할 필요가 없어. 우리는 서버의 Minecraft 버전에서 런타임을 판단하고 자동으로 설정해. 1.21을 주문하면 스위치를 찾을 필요 없이 Java 21을 받게 돼.
Leaf나 Leaves 같은 서버 Fork의 경우에는 일반 규칙을 그대로 적용하지 않고, 각 릴리스마다 정확한 매핑을 따로 관리해. 이유는 간단해. Fork는 Vanilla 요구 사항과 다를 수 있고, 낙관적으로 가정하면 정말 중요한 순간에 틀릴 수 있어. 어떤 조합에 맞는 Java를 찾을 수 없으면, 너무 낮은 런타임으로 시작하는 대신 의도적으로 작업을 중단해. 애초에 잘못 시작하지 않는 서버가, 반쯤만 실행되는 서버보다 고치기 쉬워.
가장 흔한 경우: 서버가 아니라 플러그인
서버가 방금 전까지 잘 실행됐고, 파일을 하나 추가한 뒤 오류가 생겼다면 원인은 명확해. 이렇게 진행하면 돼.
- 메시지의 클래스 이름을 적어 둬. 거의 항상 프로젝트 이름을 알려줘.
- 제공자 쪽에서 맞는 빌드 버전을 찾아. 많은 플러그인은 Java 17과 Java 21용 다운로드를 따로 제공하고, 보통
-java17같은 접미사가 붙거나 별도 릴리스 브랜치로 제공돼. 가장 최신 파일이 자동으로 올바른 파일은 아니야. - 맞는 버전이 없다면, 더 새로운 Minecraft 버전이 필요해. 더 새로운 런타임은 그때 함께 따라오기 때문이야. 월드를 잃지 않고 버전을 바꾸는 방법은 Minecraft 서버 버전 변경에 정리되어 있어.
- 서버를 급히 실행해야 한다면 플러그인을 일단 제거해. 플러그인을 깔끔하게 추가하고 제거하는 방법은 Minecraft 모드와 플러그인 설치에서 볼 수 있어.
다른 경우: Java가 너무 최신일 때
이 경우는 설명이 잘 안 되지만 실제로 자주 발생해. 오래된 Forge Modpack, 대표적으로 1.12.2는 Java 8용으로 만들어졌어. Java 21에서는 실패하지만, 보통 UnsupportedClassVersionError가 아니라 누락된 내부 클래스나 거부된 시작 매개변수에 대한 메시지가 나와.
특징은 이래. 예전에는 Pack이 실행됐거나 다른 사람에게서는 실행되고, 네 서버가 아주 오래된 Minecraft 버전을 표시해. 이때 해결책은 더 새로운 Java가 아니라, Panel에서 그 Pack에 맞는 Minecraft 버전을 선택하는 거야. 그러면 우리가 알맞은 오래된 런타임을 설정해.
솔직히 말하면: 이 경우에는 우리의 자동 수정이 적용되지 않아. 자동 수정은 오직 “너무 오래된” 방향, 즉 서버가 현재 실행 중인 것보다 더 새로운 Java를 필요로 할 때만 고쳐. 너무 최신인 Java는 의도적으로 Drift로 보지 않아. 그렇지 않으면 일부러 오래된 런타임을 선택한 고객의 설정이 자동으로 다시 바뀌어 버릴 수 있으니까.
우리가 자동으로 처리하는 것
- 주문 시점부터 알맞은 런타임. Java 버전은 설정 없이 Minecraft 버전을 따라가.
- 버전 변경 시 수정. 더 높은 Java가 필요한 버전으로 바꾸면 런타임도 함께 바뀌어.
- Boot Log가 계산보다 우선. 서버가 시작할 때 현재 실행 중인 것보다 더 높은 Java 버전이 필요하다고 직접 말하면, 우리는 주문한 버전에서 추론한 값이 아니라 이 측정값을 기준으로 수정해. 서버가 스스로에 대해 말하는 정보가 어떤 표보다 더 신뢰할 수 있어.
- 커스텀 Images는 건드리지 않아. 네 서버가 직접 선택한 런타임에서 실행 중이면 우리는 개입하지 않아.
- 반쯤 맞게 시작하지 않고 중단. 어떤 조합에 맞는 Java가 없으면 잘못된 런타임으로 시작하는 대신 중단하고 알려줘.
Troubleshooting
| 증상 | 확인 | 해결 |
|---|---|---|
class file version 65.0이 나오고 클래스 이름이 플러그인임 |
추가하기 전에는 서버가 실행됐어? | 네 MC 버전에 맞는 플러그인 빌드를 받아 |
| 서버 시작 직후 오류가 나고 플러그인이 언급되지 않음 | 어떤 Minecraft 버전이 실행 중이야? | 버전과 런타임을 맞춰 |
| 오래된 1.12.2 Modpack이 시작되지 않음 | 로그에 누락된 내부 클래스가 나오니? | Java가 너무 최신이야. 맞는 MC 버전을 선택해 |
| 버전 변경 후 오류 | 변경 직후 바로 발생했어? | 재시작을 기다려 보고, 계속되면 전체 줄을 Support에 보내 |
| 플러그인은 로드되지만 기능이 없음 | 로그에 오류가 아니라 경고가 나오니? | 다른 원인이야. Java 버전 문제가 아니야 |
FAQ
Java 버전을 직접 바꿀 수 있어?
game-serverhosting에서는 그럴 필요가 없어. Java 버전은 네 서버의 Minecraft 버전에서 결정돼. 다른 런타임이 필요하다면 올바른 방법은 Minecraft 버전을 바꾸는 거야. 그러면 전체 환경이 맞게 구성돼.
더 새로운 Java가 항상 더 좋아?
아니. Minecraft에서는 요구되는 버전이 사실상 실용적인 상한선이기도 해. 서버 코어, 모드, 플러그인이 그 버전에 맞춰져 있어. “혹시 더 좋을까” 하고 더 높은 런타임으로 뛰어넘는 건 이점이 없고 오래된 모드를 망가뜨릴 수 있어.
내 플러그인은 로컬에서는 되는데 서버에서는 왜 안 돼?
네 로컬 Java 설치가 서버의 Java보다 더 최신일 수 있기 때문이야. 중요한 건 네 컴퓨터의 런타임이 아니라 서버에서 실행되는 런타임이야.
내 서버가 지금 어떤 Java로 실행 중인지 어떻게 알아?
메시지가 알려줘. only recognizes class file versions up to 61.0은 Java 17이라는 뜻이야. 오류 메시지가 없다면 서버 시작 시 콘솔의 처음 몇 줄에 Java 버전이 표시돼.
Java를 바꾸면 월드를 새로 만들어야 해?
아니. 런타임은 실행에만 영향을 주고 월드 형식에는 영향을 주지 않아. 반대로 Minecraft 버전을 바꾸면 월드 형식이 바뀔 수 있어. 그래서 먼저 Backup을 만들어 둬.
다음 단계
서버가 다시 실행되지만 느리다면 Minecraft 서버 랙: Watchdog Timeout 해결이 도움이 돼. 메모리가 Modpack 크기에 맞지 않는다면 Minecraft RAM 계산기로 필요한 용량을 계산할 수 있어.
게임 버전에 맞는 Java 버전이 자동으로 적용되는 서버를 찾고 있어? Minecraft 서버 대여에서 요금제를 볼 수 있어.
출처와 검증 기준
- Minecraft 버전별 Java 요구 사항: Minecraft Wiki — Server/Requirements. 1.17부터 Java 16, 1.18부터 Java 17, 1.20.5부터 Java 21을 명시해.
- class-file 버전 매핑: Oracle — The Java Virtual Machine Specification, Java SE 21, Tabelle 4.1-A. 52 = Java 8, 55 = Java 11, 60 = Java 16, 61 = Java 17, 65 = Java 21 및 JVM이 나열된 버전까지만 지원하고 더 높은 버전은 지원하지 않는다는 규칙을 뒷받침해.
- Java 25: Oracle — The Java Virtual Machine Specification, Java SE 25, Tabelle 4.1-A. Major 69를 확인해.
검증 기준: 2026년 8월 24일. 새로운 Minecraft 버전은 새로운 Java 요구 사항을 가져올 수 있어. 링크된 출처가 각각 현재 기준이야.