错误信息其实已经给出了答案:如果里面写着 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

这里面有三个信息:

  1. com/example/PluginMain — 谁触发了错误。如果这里是某个插件或 Mod 名称,意思就是:这个文件不匹配,服务器本身没问题。
  2. class file version 65.0 — 需要什么:65 − 44 = Java 21
  3. 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 运行时总是能理解所有更旧的 class 文件版本,但永远不能理解更新的版本。所以 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

在我们这里你不需要手动设置。 我们会根据你服务器的 Minecraft 版本推导运行时,并自动设置。你订购 1.21,就会得到 Java 21,不需要到处找开关。

对于 Leaf 和 Leaves 这样的服务器 Fork,我们还会按每个 Release 维护一份精确对应关系,而不是直接套用通用规则。原因是:Fork 可以偏离 Vanilla 的要求,而乐观假设往往会在关键时刻出错。如果某个组合找不到合适的 Java,我们会有意中止流程,而不是启动一个过低的运行时。一个根本不会错误启动的服务器,比一个半正常运行的服务器更容易修复。

最常见的情况:是插件,不是服务器

如果你的服务器刚才还能运行,而错误是在添加某个文件之后出现的,那情况就很清楚。处理步骤:

  1. 记下提示里的类名。 它几乎总会指向对应项目。
  2. 到提供方那里找合适的构建版本。 很多插件会分别提供 Java 17 和 Java 21 的下载,常见标记是 -java17,或者作为单独的 Release 分支。最新文件不一定就是正确文件。
  3. 如果没有合适版本,你就需要更新的 Minecraft 版本,因为只有它才会带来更新的运行时。如何在不丢失世界的情况下切换版本,可以看 切换 Minecraft 服务器版本
  4. 如果服务器必须马上运行,先移除插件。 如何干净地添加和移除插件,可以看 安装 Minecraft Mods 和插件

另一种情况:Java 太新

这种情况很少被解释,但其实经常发生。老 Forge Modpack,典型例子是 1.12.2,是为 Java 8 构建的。在 Java 21 下它们会失败,不过通常不是 UnsupportedClassVersionError,而是提示缺少内部类或启动参数被拒绝。

特征是:这个 Pack 以前能运行,或者在别人那里能运行,而你的服务器显示的是一个非常旧的 Minecraft 版本。解决办法这时不是使用更新的 Java,而是在面板里选择这个 Pack 对应的 Minecraft 版本,这样我们就会设置匹配的旧运行时。

坦白说明: 我们的自动修正在这种情况下不会介入。它只会修复“太旧”的方向,也就是服务器需要比当前运行中更新的 Java。太新的 Java 不会被视为漂移,这是有意设计的,否则一个刻意选择旧运行时的客户,会被系统自动改回去。

我们会自动处理什么

  • 订购时就匹配运行时。 Java 版本跟随 Minecraft 版本,无需设置。
  • 版本切换时自动修正。 如果你切换到需要更高 Java 的版本,运行时会一起调整。
  • 启动日志优先于推算。 如果你的服务器在启动时自己指出需要的 Java 版本高于当前运行时,我们会根据这次测量来修正,而不是只依赖订购版本推导。服务器对自身的说明,比任何表格都更可靠。
  • 自定义镜像不受影响。 如果你的服务器运行在你自己选择的运行时上,我们不会介入。
  • 失败即停止,而不是半对半错。 如果某个组合没有合适的 Java,我们会中止并报告,而不是启动错误的运行时。

Troubleshooting

症状 检查 解决办法
提到 class file version 65.0,类名是插件 添加之前服务器能运行吗? 下载适合你 MC 版本的插件构建
服务器启动时直接报错,未提到插件 正在运行哪个 Minecraft 版本? 让版本和运行时保持一致
旧的 1.12.2 Modpack 无法启动 日志是否提到缺少内部类? Java 太新了,选择匹配的 MC 版本
版本切换后报错 是否刚切换完就出现? 等待重启完成;如果仍然存在,带完整那一行联系支持
插件加载了,但功能缺失 日志里是警告而不是错误吗? 另有原因,不是 Java 版本

FAQ

我可以自己切换 Java 版本吗?

在我们这里不需要:它由你服务器的 Minecraft 版本决定。如果你需要另一个运行时,正确做法是切换 Minecraft 版本,这样整个环境才会匹配。

更新的 Java 总是更好吗?

不是。对 Minecraft 来说,要求的版本同时也是一个实用上限:服务器核心、Mods 和插件都是围绕它调好的。凭感觉跳到更高运行时没有好处,还可能弄坏旧 Mods。

为什么我的插件本地能运行,服务器上不行?

因为你本地安装的 Java 可能比服务器上的更新。关键是服务器上的运行时,而不是你电脑上的运行时。

我怎么知道服务器现在用的是哪个 Java?

提示会告诉你:only recognizes class file versions up to 61.0 表示 Java 17。如果没有错误信息,服务器启动时会在控制台最前面的几行写出 Java 版本。

Java 切换后我需要重新创建世界吗?

不需要。运行时只影响执行,不影响世界格式。不过切换 Minecraft 版本 可能改变世界格式,所以之前要先创建备份。

下一步

如果服务器恢复运行但仍然很慢,可以继续看 Minecraft 服务器卡顿:修复 Watchdog 超时。如果内存不适合 Modpack 大小,Minecraft RAM 计算器 可以帮你算出需求。

你在找一个 Java 版本会自动匹配游戏版本的服务器?在 租用 Minecraft 服务器 可以查看套餐。

来源和验证环境

验证环境: 2026 年 8 月 24 日。新的 Minecraft 版本可能带来新的 Java 要求;链接中的来源分别代表当前状态。