一、为什么要指定 Java 版本?
先讲个故事。
小明有一个 Linux 服务器,上面跑着三个 Java 程序:
程序A:是个老旧的 Minecraft 服务器(1.12.2 版本),必须用 Java 8
程序B:是最新的 Minecraft Paper 服务端(1.20.4 版本),需要 Java 17
程序C:是某个 Java 开发的 Web 后台,需要 Java 21
问题来了——Linux 上一套系统环境只能默认用一个 Java。如果小明把默认 Java 设成 17,那程序A就启动不了;设成 8,程序B又报错。
解决方案很简单: 不让它们用「默认 Java」,而是每个程序单独指定它要用哪个 Java 来跑。
这就好比你家里有三个孩子,每个孩子都有自己专用的水杯——你只需要告诉每个孩子:「用你自己的杯子喝水」,而不是全家抢一个杯子。
二、先搞清楚:你的 Linux 上装了几个 Java?
打开 Linux 终端,输入下面这条命令:
find / -name "java" -type f 2>/dev/null
它会列出你系统里所有 java 可执行文件的位置。通常长这样:
/usr/lib/jvm/java-8-openjdk-amd64/bin/java /usr/lib/jvm/java-11-openjdk-amd64/bin/java /usr/lib/jvm/java-17-openjdk-amd64/bin/java /usr/lib/jvm/java-21-openjdk-amd64/bin/java
看到没?你的系统里可能已经装了好几个 Java,只是你不知道而已。
接下来,分别看看每个 Java 是啥版本:
/usr/lib/jvm/java-8-openjdk-amd64/bin/java -version /usr/lib/jvm/java-17-openjdk-amd64/bin/java -version /usr/lib/jvm/java-21-openjdk-amd64/bin/java -version
每个命令会输出类似这样的信息,告诉你它是 Java 8、Java 17 还是 Java 21:
openjdk version "17.0.10" 2024-01-16 OpenJDK Runtime Environment (build 17.0.10+7) OpenJDK 64-Bit Server VM (build 17.0.10+7, mixed mode, sharing)
三、命令行中:用指定 Java 运行 JAR 包
假设你要运行一个叫 server.jar 的程序,这个程序需要 Java 17 才能跑。
错误做法:
java -jar server.jar
这条命令用的是「系统默认 Java」,你可能默认是 Java 8,于是就报错了。
正确做法:
/usr/lib/jvm/java-17-openjdk-amd64/bin/java -jar server.jar
看懂没?就是把 java 换成完整的路径——/usr/lib/jvm/java-17-openjdk-amd64/bin/java。
这样你就绕过了系统默认的 Java,直接调用了 Java 17 的「真身」。
如果你要长期在后台运行(挂机不中断):
nohup /usr/lib/jvm/java-17-openjdk-amd64/bin/java -jar server.jar > output.log 2>&1 &
拆开解释:
nohup:退出终端时程序不退出
> output.log:把输出信息存到文件里
2>&1:错误信息也存进去
&:放到后台去跑
四、MCSManager 里如何指定 Java 版本?
MCSManager 是一个网页版的管理面板,专门用来管理 Minecraft 服务器。你也可以用 MCSManager 跑其他 JAR 包。
架构是这样的:
你打开网页 → MCSManager 后台 → 拉起来一个 Java 进程 → 运行你的 server.jar
我们要做的,就是告诉 MCSManager:「拉起 Java 进程的时候,用 Java 17,别用 Java 8」。
操作步骤:
第一步:登录 MCSManager 网页面板
打开浏览器,输入你的服务器 IP 和端口,登录进去。
第二步:找到你的实例(就是你要运行的那个 JAR 包)
点击进入那个实例的管理页面。
第三步:找到「Java 路径」或「运行环境」设置
一般在实例的「设置」或「配置」页面里。
第四步:把完整的 Java 路径填进去
比如:
/usr/lib/jvm/java-17-openjdk-amd64/bin/java
第五步:保存,重启实例
然后启动它,MCSManager 就会用你指定的 Java 17 去运行了。
五、常见问题(启动失败怎么办?)
错误1:UnsupportedClassVersionError
报错里能看到这个词。意思就是 Java 版本太低,你的程序需要 Java 17,但你给了它 Java 8。
解决: 换成高版本 Java 的路径。
错误2:Unable to access jarfile
意思就是 MCSManager 找不到你的 JAR 包文件。
解决: 检查实例设置里的「JAR 文件路径」是否正确,或者看看文件还在不在:
ls -la /你填的路径/server.jar
错误3:Permission denied
意思就是 Java 这个程序没有「执行权限」。
解决: 给 Java 可执行权限:
sudo chmod +x /usr/lib/jvm/java-17-openjdk-amd64/bin/java
错误4:页面转半天然后超时
通常是 Java 进程启动得太慢,或者被卡住了。
解决: 去服务器上手动跑一次看看有没有错误信息:
/usr/lib/jvm/java-17-openjdk-amd64/bin/java -jar /你的路径/server.jar
看终端里输出了什么报错。
六、总结
1.命令行跑 JAR 包 直接写完整 Java 路径,比如 /usr/lib/jvm/java-17-openjdk-amd64/bin/java -jar xxx.jar
2.MCSManager 管理 在实例设置的「Java 路径」或启动设置里填完整路径
3.多个实例不同 Java 每个实例独立填各自的 Java 路径,互不影响
4.启动失败 先手动跑一次看报错信息,再对症下药
别依赖「系统默认的 Java」,直接告诉每个程序:「你用这个 Java,那个你用那个 Java。」