エラーメッセージには、答えがすでに入っている。そこに class file version 65.0 と出ているなら、そのファイルは Java 21 を要求している。計算はいつも同じで、数字から44を引くとJavaバージョンになる。ただし数字以上に大事なのは、誰のファイルが指されているかだ。多くの場合、サーバーが古すぎるのではなく、単一のPluginが新しすぎる。
メッセージの読み方
典型的な行はこう見える。
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
ここには3つの情報が含まれている。
com/example/PluginMain— エラーを起こしているもの。ここにPlugin名やMod名が出ているなら、その1つのファイルが合っていないだけで、サーバー自体は問題ない。class file version 65.0— 何が必要か。65 − 44 = Java 21。only recognizes … up to 61.0— 何で動いているか。61 − 44 = Java 17。
つまり、Java 21向けに作られたPluginが、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仕様に基づいている。44という差はJava 1.0からずっと一定なので、表を増やさなくても今後のバージョンを自分で計算できる。
覚えておこう: Javaランタイムは常に古いクラスファイルバージョンを理解できるが、新しいものは絶対に理解できない。だからJava 8向けPluginは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のようなサーバーフォークについては、一般ルールをそのまま使うのではなく、Releaseごとに正確な対応表を管理している。理由は、フォークがVanillaの要件から外れることがあるからだ。楽観的な推測は、いちばん大事な場面で外れる。ある組み合わせに合うJavaが見つからない場合は、低すぎるランタイムで起動するのではなく、意図的に処理を止める。間違った状態で半分だけ動くサーバーより、最初から誤起動しないサーバーのほうが直しやすい。
いちばん多いケース: サーバーではなくPlugin
さっきまでサーバーが動いていて、ファイルを追加した直後にエラーが出たなら、原因はかなりはっきりしている。手順はこうだ。
- メッセージ内のクラス名をメモする。 ほぼ必ずプロジェクト名の手がかりになる。
- 配布元で合うBuild版を探す。 多くのPluginはJava 17用とJava 21用の別Downloadを用意しており、
-java17のような追記や専用Releaseブランチがあることも多い。最新ファイルが自動的に正解とは限らない。 - 合う版がない場合は、より新しいMinecraftバージョンが必要だ。新しいランタイムは、そのMinecraftバージョンによって初めて付いてくる。ワールドを失わずにバージョンを変える方法は、Minecraftサーバーのバージョンを変更するにある。
- サーバーを急いで動かす必要があるなら、Pluginをいったん外す。 Pluginをきれいに追加・削除する方法は、MinecraftのModsとPluginsをインストールするで説明している。
もう一つのケース: Javaが新しすぎる
このケースはあまり説明されないが、実際にはよく起きる。古いForge Modpack、典型例は1.12.2だが、これは Java 8 向けに作られている。Java 21では失敗する。ただし多くの場合、UnsupportedClassVersionError ではなく、存在しない内部クラスや拒否された起動パラメータに関するメッセージが出る。
見分け方: そのPackは以前は動いていた、または他の環境では動く。そして君のサーバーがかなり古いMinecraftバージョンを示している。この場合の解決策は新しいJavaではなく、そのPackに対応するMinecraftバージョンをPanelで選ぶことだ。そうすれば、対応する古いランタイムを設定する。
正直な注意: このケースでは自動修正は働かない。自動修正は「古すぎる」方向、つまりサーバーが現在のランタイムより新しいJavaを必要としている場合だけを直す。新しすぎるJavaは意図的にDrift扱いしない。そうしないと、意図して古いランタイムを選んだユーザーが、自動でまた失ってしまうからだ。
game-serverhostingが自動で引き受けること
- 注文時点から適切なランタイム。 JavaバージョンはMinecraftバージョンに従い、設定は不要。
- バージョン変更時の修正。 より高いJava要件を持つバージョンへ変更すると、ランタイムも追従する。
- Boot Logは計算より優先。 起動時にサーバー自身が現在より高いJavaバージョンを必要としていると言った場合、注文されたバージョンからの推測ではなく、その測定結果に基づいて修正する。サーバー自身の自己申告は、どんな表より信頼できる。
- 独自Imageは触らない。 君が自分で選んだランタイムでサーバーを動かしている場合、こちらでは介入しない。
- 半端に正しいよりFail-closed。 ある組み合わせに合うJavaが存在しない場合、間違ったランタイムで起動するのではなく、処理を止めて通知する。
Troubleshooting
| 症状 | 確認 | 解決策 |
|---|---|---|
class file version 65.0 と出ていて、クラス名がPlugin |
追加前はサーバーが動いていた? | 君のMCバージョン用のPlugin Buildを入れる |
| サーバー起動直後にエラー、Plugin名なし | どのMinecraftバージョンが動いている? | バージョンとランタイムを揃える |
| 古い1.12.2 Modpackが起動しない | Logに内部クラス不足が出ている? | Javaが新しすぎる — 合うMCバージョンを選ぶ |
| バージョン変更後にエラー | 変更直後に起きた? | 再起動を待つ。残る場合は完全な行を添えてSupportに連絡する |
| Pluginは読み込まれるが機能がない | Logにエラーではなく警告がある? | 別の原因 — Javaバージョンではない |
FAQ
Javaバージョンを自分で切り替えられる?
game-serverhostingでは必要ない。サーバーのMinecraftバージョンから自動的に決まる。別のランタイムが必要なら、正しい方法はMinecraftバージョンを変更することだ。そうすれば環境全体が合う。
新しいJavaは常に良い?
いいえ。Minecraftでは、要求されるバージョンが実用上の上限でもある。サーバーコア、Mods、Pluginsはそのバージョンに合わせられている。「念のため」に高いランタイムへ飛ばしても利点はなく、古いModsを壊す。
ローカルではPluginが動くのに、サーバーでは動かないのはなぜ?
君のローカルJavaインストールが、サーバーのものより新しい可能性があるからだ。重要なのはサーバー上のランタイムであって、君のPC上のものではない。
サーバーが今どの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, Table 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, Table 4.1-A。Major 69を示している。
検証環境: 2026年8月24日。新しいMinecraftバージョンでは新しいJava要件が追加される可能性がある。リンク先の出典がそれぞれ最新の状態だ。