一个服务器能装两个JDK吗,安装步骤是什么

答案是完全可以,只要把两个JDK放进不同的安装目录,再通过配置JAVA_HOME和PATH来切换,它们就能在同一个系统里各用各的,互不干扰。

我自己的开发机上就常年挂着JDK 8和JDK 17,一个用来跑老项目,一个用来试新框架,切换起来也就一条命令的事,这套逻辑搬到服务器上完全一样,只是你要多留神环境变量的优先级,别让系统替你“乱点鸳鸯谱”。

JDK配置安装及多个版本JDK共存的方法
加载中
JDK配置安装及多个版本JDK共存的方法

一个服务器装两个jdk有什么用

有同事第一次听说服务器上装两个JDK,第一反应是“这也太折腾了”,等你真遇到下面这些场景,就知道它多实用了。

  • 老项目还跑在JDK 8上,新服务又要求JDK 17起步,改代码一时半会儿完不成,版本又不敢降,只能先共存
  • 运维接手历史机器,发现上面已经装了一套JDK,新部署的脚本又绑定另一个版本,卸载旧的会出事
  • 同一台服务器上,Tomcat里跑着JDK 8的旧应用,旁边又开了个新版Spring Boot服务,强行要求JDK 17

核心原则一句话:JDK的安装目录互相独立,哪个版本生效由JAVA_HOME和PATH的顺序说了算,而不是由你“装了几下”决定的。

近年来企业服务器上凡是需要多版本共存的,基本走这条路线,比反复卸载重装省心多了。

Linux服务器怎么装两个jdk版本

我拿CentOS 7.x举例,其他发行版把包管理器换一下就通用了。

第一步:找两个干净的tar.gz解压包

不要用yum装系统自带的openjdk,它的目录结构乱,而且跟系统绑定太紧。推荐下载官方tar.gz解压包,放到/usr/local/jdk目录下,一个版本一个文件夹。

一个服务器能装两个JDK吗,安装步骤是什么

mkdir -p /usr/local/jdk cd /usr/local/jdk tar -zxvf jdk-8u202-linux-x64.tar.gz tar -zxvf jdk-17_linux_x64_bin.tar.gz

解压完的目录结构类似:

/usr/local/jdk/
├── jdk1.8.0_202
└── jdk-17.0.2

第二步:维护两个环境变量文件

直接在/etc/profile里改来改去,切一次版本改一次文件,迟早改晕,更干净的玩法是创建两个独立的profile文件,分别对应两个JDK。

创建JDK 8的环境变量文件:

vim /etc/profile.d/jdk8.sh

写入:

export JAVA_HOME=/usr/local/jdk/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

创建JDK 17的环境变量文件:

vim /etc/profile.d/jdk17.sh

写入:

export JAVA_HOME=/usr/local/jdk/jdk-17.0.2
export PATH=$JAVA_HOME/bin:$PATH

两个文件里的路径一定不能写反,写反了等于白干。

当下需要哪个版本,就source对应的文件:

source /etc/profile.d/jdk8.sh
java -version
# 输出1.8.0_202
source /etc/profile.d/jdk17.sh
java -version
# 输出17.0.2

第三步:清理系统自带的java软链接

好多新手在服务器上装完两个jdk,切换了JAVA_HOME,执行java -version却还是老版本。绝大多数情况下的根因是PATH里有系统自带的/usr/bin/java软链接,优先级比你的JAVA_HOME还高。

先检查:

which java

如果输出是/usr/bin/java,二话不说把软链接删掉:

一个服务器能装两个JDK吗,安装步骤是什么

rm -f /usr/bin/java

然后重新source一下,让JAVA_HOME正式接管。

第四步:给切换建个快捷方式

每次登录都敲source命令确实烦,在~/.bashrc里加上两个别名:

alias jdk8='source /etc/profile.d/jdk8.sh'
alias jdk17='source /etc/profile.d/jdk17.sh'

以后登录服务器,敲jdk8就是JDK 8,敲jdk17就是JDK 17,业内专家指出,判断当前生效JDK永远看JAVA_HOME和PATH的顺序,两者冲突时,先被PATH找到的那个说了算,所以别名方案的本质,就是让你主动去控制这个顺序。

Windows服务器装两个jdk环境变量配置

Windows服务器上用安装包装两个JDK,大概率装第二个时把第一个的JAVA_HOME覆盖掉,让人气得想砸键盘。原因就是MSI安装包会往系统环境变量里硬写绝对路径,装一次写一次。

改用解压版,思路跟Linux一致。

解压出两个目录

把JDK 8和JDK 17分别解压到:

D:jdkjdk1.8.0_202
D:jdkjdk-17

建两个变量名,别只用一个

打开系统属性 → 环境变量,在系统变量里新建一个JAVA_HOME_8,指向JDK 8目录;再新建一个JAVA_HOME_17,指向JDK 17目录。

JAVA_HOME本身指向谁,就看你想默认用哪个版本。

PATH里别写死路径

PATH中要么写%JAVA_HOME%bin,要么干脆用带版本名的变量:

%JAVA_HOME_8%bin

以后切换,只改JAVA_HOME_8这个值,或者把PATH里的变量名换一下,你不需要额外记什么jdk版本切换命令,Windows下的核心就是避免写死。

多jdk共存最容易踩的坑

前面聊的都是顺风局,真正让运维头疼的坑藏在下面几类:

一个服务器能装两个JDK吗,安装步骤是什么

  • 老项目引用的第三方库编译版本低于JDK 8,硬搬到JDK 17上运行,动不动就NoSuchMethodError
  • Tomcat、Jetty这类应用服务器有自己的启动脚本,脚本里写死了jar路径或JAVA_HOME,全局环境变量对它根本无效
  • Maven或Gradle构建时,编译器版本跟当前JDK不匹配,报出莫名其妙的兼容性错误

行业共识认为:多JDK共存本身不是麻烦,麻烦的是项目里的中间件各自绑定版本、各自藏着一套配置。

遇到这些情况,不要只切全局JAVA_HOME,去翻对应服务的启动脚本,该在脚本里指定路径就指定路径,别偷懒。

Q&A:一个服务器怎么装两个jdk版本共存问题

问:一个服务器装两个jdk会互相覆盖吗?

不会,JDK本质是一堆文件和目录,只要安装路径分得清清楚楚,它们之间没有任何写入交集,你看到的“覆盖”其实都是环境变量被反复修改导致的假象,JDK文件本身没被谁动过。

问:切换JDK版本后,已经启动的服务需要重启吗?

新起的进程会读取切换后的环境变量,已经在跑的服务不会受影响,想让特定服务用上目标JDK,必须手动重启那个服务,让新进程去加载新环境变量。

问:直接用Docker装不同JDK会不会更省事?

Docker把每个JDK隔离在独立容器里,业务环境更干净,而且JDK镜像体积小,拉起一个实例也就几十秒的事,如果服务器本身已经有容器编排平台,用Docker管理多版本JDK确实比在宿主机折腾环境变量更灵活,没有容器平台的话,老老实实用我上面教的方法,也足够胜任日常任务。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/%e4%b8%80%e4%b8%aa%e6%9c%8d%e5%8a%a1%e5%99%a8%e8%83%bd%e8%a3%85%e4%b8%a4%e4%b8%aajdk%e5%90%97%ef%bc%8c%e5%ae%89%e8%a3%85%e6%ad%a5%e9%aa%a4%e6%98%af%e4%bb%80%e4%b9%88/

赞 (0)
聚石塔服务器一年费用是多少?,简米云聚石塔租用价格
上一篇 2026年10月13日 12:25
SQL服务器账号密码怎么设置,密码格式是什么?
下一篇 2026年10月13日 12:27

相关推荐

  • 云服务器iis8配置好后如何上传网站?,网站部署步骤详解

    在云服务器上配置好 IIS8 后,上传网站就是先把本地文件传到服务器站点目录,再在 IIS 管理器里新建站点、绑定域名和端口、设置默认文档与权限,最后放行安全组和 Windows 防火墙, 只要这条链路完整,外网就能访问,先确认云服务器和 IIS8 环境是否就绪远程桌面连接与 IIS8 角色检查先在本地 Win……

    程序编程 2026年10月10日
    100
  • 华为手机如何设置wifi一直连接服务器,服务器连接失败怎么办

    华为手机WiFi频繁断开、自动掉线,核心解决办法是关闭省电模式下的WiFi休眠策略、修改开发者选项中的WiFi扫描间隔,并优先连接5G频段;如果这些都没用,再检查路由器DHCP地址池和静态IP设置,很多朋友问“华为手机怎么设置wifi一直连接服务器”,其实这里有个理解偏差,手机连接WiFi后,系统层面并不存在一……

    2026年10月8日
    100
  • AIoT智能管家怎么用?AIoT智能管家功能详解

    AIoT智能管家作为智能家居生态的核心中枢,正在彻底改变人们的生活方式,其核心价值在于通过人工智能与物联网技术的深度融合,实现设备互联、场景自动化与个性化服务,最终构建高效、安全、舒适的智慧生活空间,技术架构:三层次赋能智能体验AIoT智能管家系统由感知层、网络层和应用层构成,感知层通过温湿度传感器、摄像头等设……

    2026年3月15日
    12100
  • 华为服务器怎么用U盘安装系统?,安装步骤有哪些?

    华为服务器用U盘装系统,核心操作就三步——制作启动U盘、设置U盘启动、进入安装界面走完分区和驱动加载,下面按视频实操的逻辑,把从准备到装完的每个画面拆开讲,你看完就能自己上手,华为服务器u盘安装系统教程视频:准备工作与镜像下载做之前先别急着插U盘,华为服务器和普通PC不一样,它可能没带光驱,U盘是最高效的安装介……

    2026年10月15日
    100
  • Win11服务器运行失败咋回事,Win11运行失败怎么解决?

    Win11服务器运行失败,核心原因集中在驱动兼容性、服务组件异常和硬件配置不达标这三类问题上,解决思路也应当按这个顺序排查,很多人在普通Win11系统跑本地服务或者升级到Windows Server 2025后遇到启动失败,第一反应是重装系统,其实多数情况通过更新驱动、修复服务依赖、调整虚拟内存就能恢复,最常见……

    2026年10月16日
    100
  • 维斯易联m10打印服务器如何设置,设置步骤是什么?

    设置维斯易联m10打印服务器,你只需要通过手机APP完成配网,再让打印机连接到WiFi,整个过程不超过5分钟, 这个设备的核心价值是把传统USB打印机变成无线打印机,支持手机、电脑、平板等多种设备直接打印,无需再受线缆束缚,维斯易联m10打印服务器设置全流程拿到设备后,先别急着插线,M10的配网逻辑和智能家居类……

    2026年8月4日
    1700
  • 戴尔T150服务器内存条怎么拆,内存条拆卸步骤有哪些?

    戴尔T150服务器内存条拆卸并不难,关键是把机箱侧板打开,找到内存插槽,按下两端卡扣就能拔出,安装时注意缺口对齐方向即可,全程不需要特殊工具,戴尔t150服务器内存条怎么拆:准备工作比动手更重要很多人拿到T150第一反应是找螺丝,其实这台塔式服务器拆内存条比想象中简单,但正因为太简单,反而容易忽略一些细节,导致……

    2026年10月16日
    200
  • 如何在简米云查询服务器IP地址,IP地址在哪里看?

    在阿里云查看服务器IP地址,最直接的方法就是登录阿里云控制台,在ECS实例列表页面即可看到公网IP和内网IP,很多用户第一次接触阿里云服务器时,都会遇到找不到IP地址的情况,尤其是刚买完服务器,急着远程连接部署环境,翻遍邮箱和短信也找不到那串关键数字,IP地址并不需要通过客服获取,阿里云控制台已经把信息整理得明……

    2026年8月27日
    1300
  • 戴尔R230服务器怎么做RAID?,RAID阵列怎么设置

    戴尔R230服务器做RAID,关键先看机器上装的是哪块阵列卡:出厂带PERC H330/H730硬件卡,就在开机自检时按Ctrl+R或进UEFI的Device Settings直接建虚拟磁盘;只配了S130软RAID,则必须先进BIOS把SATA模式切成RAID,再进配置界面操作, 两条路的界面、入口、性能和踩……

    程序编程 2026年10月31日
    100
  • 手机玩mc怎么才能进2b2t服务器,进不去怎么办?

    手机玩mc想进2b2t服务器,目前没有官方入口,但通过第三方启动器配合正确设置,完全能在安卓或iOS设备上进入这个著名的无规则生存服务器,下文直接给你一套可落地的操作路径,从下载工具到输入命令,每一步都按实际执行顺序写清楚,照着做就行,手机mc进2b2t的核心障碍:版本和验证2b2t服务器运行在Java版1.1……

    2026年8月26日
    1800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注