jdk配置完之后java -version还是默认的jdk版本如何更改

虚拟机在、etc/profile中配配置完新的jdk1.8然后将配置文件立即生效,之后java -version还是cenots 7 的默认jdk为什么?

jdk安装已经成功,JAVA_HOME、PATH的环境变量也已经在/etc/profile文件下面配置成功,并且配置文件已经生效。

出现问题:

1、java -version输出的结果是默认的jdk并不是刚刚新安装的jdk:

bash 复制代码
[root@slave1 ~]# vim /etc/profile
[root@slave1 ~]# source /etc/profile
[root@slave1 ~]# java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
[root@slave1 ~]# which java
/bin/java

2. 分析问题:

在 CentOS 7 中修改/etc/profile配置 JDK 后,执行source /etc/profile仍显示默认 JDK,核心原因是系统默认的/usr/bin/java软链接(由alternatives管理)优先级高于PATH环境变量,或存在配置 / 缓存层面的隐藏问题。以下是按优先级排序的排查 + 解决步骤,直击根本原因:

一、先明确核心逻辑(为什么 PATH 生效了还没用?)

CentOS 7 中,/usr/bin/java是系统默认的java命令软链接(由alternatives工具维护),即使你的PATH中把新 JDK 的bin目录放在最前面:
如果终端执行java时,系统先匹配到/usr/bin/java(软链接指向 OpenJDK),就会忽略PATH中的新 JDK 路径;
只有当/usr/bin/java指向新 JDK,或直接删除该软链接,PATH的优先级才会体现。

步骤 1:检查java命令的实际指向(必做)

执行以下命令,定位系统真正调用的java路径:

bash 复制代码
which java  # 看输出是新JDK还是/usr/bin/java
ls -l /usr/bin/java  # 看软链接指向(OpenJDK还是新JDK)
  • 如果which java输出/usr/bin/java,且ls -l显示指向 OpenJDK → 核心问题是软链接未改; 如果which
  • java输出新 JDK 路径(如/usr/local/jdk1.8/bin/java),但java -version仍显示 OpenJDK
    → 大概率是命令缓存 / 文件权限问题。
bash 复制代码
[root@slave1 ~]# which java
/bin/java
[root@slave1 ~]# ls -l /usr/bin/java
lrwxrwxrwx. 1 root root 22 12月  9 23:16 /usr/bin/java -> /etc/alternatives/java

由上述代码可以看出输出的是/etc/alternatives/java,目前排查应该是软链接的问题。按照软链接指向 OpenJDK的方向去解决问题。

2.解决问题:

第一步:注册新 JDK 到 alternatives 系统(关键)

替换命令中 /usr/local/jdk1.8 为你实际的新 JDK 安装路径(比如你解压的 jdk1.8 所在目录):

bash 复制代码
[root@slave1 ~]# ls -l /usr/bin/java
lrwxrwxrwx. 1 root root 22 12月  9 23:16 /usr/bin/java -> /etc/alternatives/java

下面是针对性的修复步骤,一步到位解决问题:

  • 步骤 1:查看 /etc/alternatives/java 的实际指向(确认 OpenJDK 路径)
    先明确这个核心软链接到底指向哪里:
bash 复制代码
ls -l /etc/alternatives/java

输出会类似:
lrwxrwxrwx. 1 root root 71 12月 9 23:16 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.xxx/jre/bin/java(OpenJDK 路径)。

  • 步骤 2:用 alternatives 切换到新 JDK(核心操作)
    第一步:注册新 JDK 到 alternatives(如果未注册)
    替换命令中的 /usr/local/jdk1.8 为你实际的新 JDK 安装路径:
bash 复制代码
# 注册java命令(优先级100,高于OpenJDK的默认优先级)
alternatives --install /usr/bin/java java /usr/local/jdk1.8/bin/java 100

# 可选:注册javac(编译命令,避免后续javac -version仍显示OpenJDK)
alternatives --install /usr/bin/javac javac /usr/local/jdk1.8/bin/javac 100

第二步:选择新 JDK 作为默认版本

执行以下命令,会列出所有已注册的 Java 版本:

bash 复制代码
alternatives --config java

示例输出:

bash 复制代码
共有 2 个程序提供"java"。
  序号    命令
-----------------------------------------------
*+ 1           /usr/lib/jvm/java-1.8.0-openjdk/jre/bin/java
  2           /usr/local/jdk1.8/bin/java

输入要选择的序号:

输入新 JDK 对应的序号(比如上例的 2),回车即可

步骤 3:清空命令缓存,立即验证

系统会缓存 java 命令的路径,即使改了软链接,缓存仍会指向旧路径,需清空:

bash 复制代码
hash -r  # 清空命令缓存
java -version  # 验证版本(此时应显示新JDK1.8,而非OpenJDK)
相关推荐
星夜离尘562 小时前
MATLAB 工程实验:不等间隔流量积分,先把缺口与覆盖率说清楚
开发语言·matlab·时间戳·数据质量·数值积分
_Evan_Yao2 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
happylifetree2 小时前
Python70:核心语法-函数进阶-案例2
python
Ai-_Man2 小时前
Meta Muse还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·c#·1024程序员节
梓豪csd3 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
秋饼3 小时前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
王中阳Go3 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
BK贝壳3 小时前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节
学逆向的3 小时前
C 枚举变量
c语言·开发语言·网络安全
Sakura_j_h_3 小时前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务