Ubuntu安装多版本Java
如果当前服务器安装的是低版本的JAVA,如下:
bash
root@iZuf68oeh1gcgrgkeewrn2Z:~# java -version
openjdk version "11.0.32.1" 2026-08-18
OpenJDK Runtime Environment (build 11.0.32.1+1-post-1ubuntu1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 11.0.32.1+1-post-1ubuntu1-22.04-Ubuntu, mixed mode, sharing)解决方案:装 JDK 17(推荐,不动现有的 Java 11)
Ubuntu 22.04 上一条命令就行:
bash
sudo apt update
sudo apt install -y openjdk-17-jre-headless如果安装出现下面的

这个界面来自 needrestart,不是安装失败——JDK 17 已经装好了,它只是在问「这些加载了旧系统库的服务要不要顺便重启」。列出来的两个服务都别重启:
| 服务 | 勾选状态 | 建议 |
|---|---|---|
jenkins.service | 已勾选 | 务必取消,重启会打断正在跑的构建、正在执行的任务直接中断 |
nginx.service | 未勾选 | 保持不勾,重启会短暂 502 |
packagekit.service | 未勾选 | 保持不勾,无关服务 |
现在怎么操作(最省事)
- 按 Tab,看高亮框移到
<Cancel> - 按 回车
选 Cancel 表示「现在什么都不重启」,apt 会直接收纳收尾,装好的 JDK 17 完全不受影响。
装完验证:
bash
/usr/lib/jvm/java-17-openjdk-amd64/bin/java -version
# 应显示 openjdk version "17.x.x"为什么要装 jre-headless 而不是 jdk:服务器只需运行 jar,不需要编译;headless 版本没有 GUI 依赖,体积小、攻击面小。
关键:别覆盖掉现有 Java 11
不要执行 update-alternatives --config java 把系统默认切到 17——如果这台机器上跑了别的 Java 应用(比如某些老项目、Jenkins),切成 17 可能把它们弄挂。
正确做法是启动时指定完整路径:
bash
nohup /usr/lib/jvm/java-17-openjdk-amd64/bin/java \
-jar cuwor-monitor-service-0.1.0.jar \
--server.port=18090 > monitor.log 2>&1 &这样 Java 11 原样保留,两个版本互不影响。
