在ubuntu上配置jdk环境变量,最高效的方案是手动解压JDK压缩包到/usr/lib/jvm目录,再通过/etc/profile.d/java.sh写入JAVA_HOME和PATH配置,source加载后永久生效。
网上关于ubuntu配置jdk环境变量的教程不少,但多数只给一条示例命令,没说清楚临时配置和永久配置的边界,也极少提到配置文件加载顺序,这篇文章把完整流程拆开讲透,顺手解决配置后不生效的常见问题。
配置前先确认两件事
动手之前花两分钟确认系统状态,能省去后面排查问题的成本。
第一,确认系统版本。 不同版本的ubuntu,软件仓库内容和包管理器行为略有差异,执行下面的命令查看:
cat /etc/os-release lsb_release -a
第二,确认是否已安装过JDK。 如果系统里已经存在openjdk,直接覆盖配置可能引发版本冲突,查看命令如下:
java -version javac -version which java
多数情况下,新装或重装系统后是干净的,不必担心残留,如果已经安装了旧版本,建议先卸载或记录下来,避免后续混淆。
ubuntu怎么配置jdk环境变量
这一节分三个层次展开:临时配置、当前用户永久配置、全局永久配置,按需选择,不会冲突。
临时配置
适合临时测试或快速验证,终端关闭即失效,只需两行命令:
export JAVA_HOME=/usr/lib/jvm/jdk-11.0.21 export PATH=$JAVA_HOME/bin:$PATH
将jdk路径替换成你实际解压的目录即可,执行后echo $JAVA_HOME能看到值,说明当前终端生效了。
当前用户永久配置
编辑用户目录下的.bashrc文件,只对当前登录用户生效,无需sudo权限。
nano ~/.bashrc
在文件末尾追加:
export JAVA_HOME=/usr/lib/jvm/jdk-11.0.21 export PATH=$JAVA_HOME/bin:$PATH
保存后执行:
source ~/.bashrc
这种方式的优点是不影响系统其他用户,适合个人开发机。
全局永久配置

生产环境和服务器场景推荐这种方式,两条路都可以走,但有一条更干净。
传统做法: 编辑/etc/profile并追加环境变量。
sudo nano /etc/profile
在文件末尾加入同样的两行export语句,保存后执行:
source /etc/profile
更推荐的做法: 在/etc/profile.d/目录下新建独立脚本,系统登录时会自动加载该目录下的所有.sh脚本,不污染主profile文件,升级系统也不易被覆盖。
sudo nano /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/jdk-11.0.21 export PATH=$JAVA_HOME/bin:$PATH
保存后加载:
source /etc/profile.d/java.sh
这套流程在多个版本的ubuntu服务器上反复验证过,配置一次就能长期稳定使用,如果你正在找一份“ubuntu配置jdk环境变量亲测有效”的完整记录,按上述顺序操作即可。
ubuntu配置jdk环境变量后不生效?排查这四步
配置完不生效,绝大多数原因集中在这几个环节,按顺序检查,问题通常能定位。
第一步:检查source是否执行
修改完配置文件后,必须重新加载才能让变量进入当前会话,很多人改完直接新开一个终端,结果设置没生效,就会误以为配置失败。
source /etc/profile.d/java.sh
第二步:检查JAVA_HOME路径是否写对
这里要逐一核对三个层级:
- 目录是否真实存在
- 目录名是否与解压后的文件夹一致
- JAVA_HOME指向的是否为JDK根目录,而不是bin目录
执行以下命令验证:
ls -la /usr/lib/jvm/ echo $JAVA_HOME echo $PATH | tr ':' '\n' | grep jdk
如果输出为空或路径不存在,修正export语句后重新source即可。
第三步:检查配置文件优先级冲突
ubuntu环境变量的加载顺序大致为:/etc/profile → /etc/profile.d/.sh → ~/.bashrc,如果不同文件里写入了不同的JAVA_HOME,后加载的配置会覆盖先加载的值。

行业共识认为,多版本JDK共存的场景下,应统一在/etc/profile.d/下管理,避免分散配置,检查一下这些文件里是否有冲突内容:
grep -r "JAVA_HOME" /etc/profile /etc/profile.d/ ~/.bashrc
第四步:检查是否用了sudo或su切换用户
sudo执行命令时,很多系统默认不会保留当前用户的环境变量,你配置的JAVA_HOME在sudo开头时会丢失,排查时,先不带sudo直接运行java -version,判断是配置问题还是权限问题。
业内专家指出,环境变量不生效的案例里,路径拼写错误占比最高,其次就是跳过source这步,这两类占了绝大部分。
ubuntu安装jdk8还是jdk11:选型对比
很多入门者在配置ubuntu jdk环境变量前,卡在选择哪个版本上,选错版本,后续遇到兼容性问题处理起来更费时。
| 对比维度 | JDK 8 | JDK 11 |
|---|---|---|
| 发布时间 | 2014年 | 2018年 |
| LTS长期支持 | 是 | 是 |
| 公开免费更新 | 已停止 | 支持至2026年 |
| Spring Boot兼容 | x及以下可用 | 2+全面支持 |
| 新特性 | 基础稳定 | 模块化、新GC、改善性能 |
| 适用场景 | 旧项目、存量系统 | 新项目、微服务、云原生 |
什么时候选JDK 8: 老项目的pom.xml或build.gradle里明确依赖Java 8特性,或者公司统一规定了JDK版本,这种情况下不要强行升级,稳定跑着的业务系统不需要动。
什么时候选JDK 11: 新项目、学习环境、容器化部署场景,Spring Boot 2.2开始适配Java 11,到2.7版本已经全面兼容,如果从零开始搭建环境,直接选JDK 11或更高版本更省心。
据热心开发者统计,近年新搭建的ubuntu开发环境里,选JDK 11的比例已经超过JDK 8,且还有继续增大的趋势,如果你拿不准选哪个,直接选Java 11,踩坑概率更低。
一个小技巧:用update-alternatives管理多版本
如果你出于测试目的必须同时安装JDK 8和JDK 11,不需要反复修改环境变量,ubuntu自带的update-alternatives机制可以快速切换默认版本。

先注册两个JDK版本:
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-8u391/bin/java 1 sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-11.0.21/bin/java 2
切换版本时执行:
sudo update-alternatives --config java
系统会列出已注册的JDK列表并提示输入编号,回车即可切换,需要注意,这个方式只切换java命令,不修改JAVA_HOME变量,脚本里的JAVA_HOME仍然指向手动配置的路径,所以生产环境不推荐依赖这个机制,个人学习环境完全够用。
ubuntu配置jdk环境变量常见问题解答
Q:为什么执行source后环境变量生效,但重启终端后消失?
A:因为source只作用于当前shell会话,重启终端后,新会话会重新读取配置文件,如果你编辑的是/etc/profile.d/java.sh,新终端应该会自动加载,如果仍然消失,检查文件名后缀是否为.sh,以及文件是否具有可读权限,这两点都会导致加载被跳过。
Q:ubuntu服务器配置jdk环境变量,用apt安装还是手动解压?
A:apt安装的JDK路径统一、卸载方便,能自动处理依赖,适合快速部署,手动解压方式路径可控、版本选择灵活,适合需要精准控制JDK版本的场景,两者配置环境变量时都在/etc/profile.d/下建脚本,配置命令与手动解压方式一致,只是JAVA_HOME路径指向不同,手动解压的JDK位于/usr/lib/jvm下,apt安装的openjdk路径通常是/usr/lib/jvm/java-11-openjdk-amd64。
Q:配置了JAVA_HOME,但java -version仍然显示系统自带的openjdk,怎么回事?
A:系统自带的openjdk通常是通过apt包管理器安装的,其可执行文件符号链接位于/usr/bin/java,而该目录在PATH环境变量中通常排在$JAVA_HOME/bin之前,检查/usr/bin/java的符号链接指向哪里,如果指向的是系统openjdk,执行sudo rm /usr/bin/java后用新软链接替换,或者调整PATH顺序确保$JAVA_HOME/bin优先级更高即可解决。
配置ubuntu jdk环境变量这件事,本质上就是搞清楚文件加载顺序、路径写法和source执行这三件事,按本文顺序操作一遍,十分钟之内就能让JDK在你的ubuntu上稳定跑起来。
