Skip to content

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

如果安装出现下面的

image-20261029181046584

这个界面来自 needrestart,不是安装失败——JDK 17 已经装好了,它只是在问「这些加载了旧系统库的服务要不要顺便重启」。列出来的两个服务都别重启:

服务勾选状态建议
jenkins.service已勾选务必取消,重启会打断正在跑的构建、正在执行的任务直接中断
nginx.service未勾选保持不勾,重启会短暂 502
packagekit.service未勾选保持不勾,无关服务

现在怎么操作(最省事) ​

  1. 按 Tab,看高亮框移到 <Cancel>
  2. 按 回车

选 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 原样保留,两个版本互不影响。