多版本 Java 共存?如何让不同程序用不同 Java 版本运行——面向小白的 Java 版本管理实战指南

一、为什么要指定 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。」

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇