当前位置: 首页 > news >正文

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

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

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

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

[root@slave1 ~]# vim /etc/profile[root@slave1 ~]# source /etc/profile[root@slave1 ~]# java -versionopenjdk version"1.8.0_262"OpenJDK Runtime Environment(build1.8.0_262-b10)OpenJDK64-Bit Server VM(build25.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路径:

whichjava# 看输出是新JDK还是/usr/bin/javals-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
    → 大概率是命令缓存 / 文件权限问题。
[root@slave1 ~]# which java/bin/java[root@slave1 ~]# ls -l /usr/bin/javalrwxrwxrwx.1root root2212月923:16 /usr/bin/java ->/etc/alternatives/java

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

2.解决问题:

第一步:注册新 JDK 到 alternatives 系统(关键)
替换命令中 /usr/local/jdk1.8 为你实际的新 JDK 安装路径(比如你解压的 jdk1.8 所在目录):

[root@slave1 ~]# ls -l /usr/bin/javalrwxrwxrwx.1root root2212月923:16 /usr/bin/java ->/etc/alternatives/java

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

  • 步骤 1:查看 /etc/alternatives/java 的实际指向(确认 OpenJDK 路径)
    先明确这个核心软链接到底指向哪里:
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 安装路径:
# 注册java命令(优先级100,高于OpenJDK的默认优先级)alternatives --install /usr/bin/java java /usr/local/jdk1.8/bin/java100# 可选:注册javac(编译命令,避免后续javac -version仍显示OpenJDK)alternatives --install /usr/bin/javac javac /usr/local/jdk1.8/bin/javac100

第二步:选择新 JDK 作为默认版本
执行以下命令,会列出所有已注册的 Java 版本:

alternatives --config java

示例输出:

共有2个程序提供“java”。 序号 命令 ----------------------------------------------- *+1/usr/lib/jvm/java-1.8.0-openjdk/jre/bin/java2/usr/local/jdk1.8/bin/java 输入要选择的序号:

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

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

hash-r# 清空命令缓存java -version# 验证版本(此时应显示新JDK1.8,而非OpenJDK)
http://www.cnnetsun.cn/news/69725.html

相关文章:

  • 基于扰动观测器的永磁同步电机(PMSM)模型预测控制(MPC)仿真探索
  • AEB联合仿真算法设计:Carsim2019.0+Matlab/Simulink2021a实现...
  • Java毕设选题推荐:基于springboot个人博客系统的设计与实现基于SpringBoot+Vue个人博客系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Java毕设选题推荐:基于springboot停车场车位预约系统基于Java springboot停车场管理系统停车位预约【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Java毕设选题推荐:基于springboot的无人化、线上化、数据化海洋馆预约系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Ascend C高级API应用:InitGlobalMemory与Pad操作的底层原理
  • Java毕设选题推荐:基于Java Web的新能源汽车信息咨询服务基于SpringBoot+Vue的新能源汽车信息咨询服务的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:OPA 集成指南:从原理到实践
  • Object.defineProperty和Proxy实现拦截的区别
  • 若依物联网
  • PSEN1抗体:如何揭示阿尔茨海默病致病机制与治疗新靶点?
  • Docker Engine 升级指南:保障容器安全的关键步骤
  • 基于zigbee灯光控制照明及色温调节系统的设计与实现(有完整资料)
  • 7、Python高级语法:描述器、属性与元编程实战
  • 【开题答辩全过程】以 基于java技术的校园一卡通系统的设计与实现为例,包含答辩的问题和答案
  • 11、Python 包与应用开发全解析
  • django基于智能推荐算法的全屋定制平台网站设计
  • 详谈:解释器模式(四)
  • 双Buck电路并联下的下垂控制与VDCM协同控制策略:增强直流微电网稳定性的仿真应用
  • Java 日期格式化方法:SimpleDateFormat 和 DateTimeFormatter
  • GPU 渲染模式:OpenGL ANGLE Vulkan 的选择与切换(工程师不踩坑指南)
  • 【dz-968】室内空气监测系统设计
  • 【接口测试】5_接口测试基础 _接口文档解析
  • 最近在搞风光储联合发电系统的仿真,发现直驱风机和光伏逆变器的配合特别有意思。今天就跟大伙儿唠唠这个模型搭建时遇到的坑,顺便分享几个关键模块的调参心得
  • 【保姆级教程】手把手带你读懂AI落地架构图!AI产品经理必备,每个节点都给你讲透!
  • 最小化门控记忆网络在风速条件分位数预测中的实践与应用
  • 先给大伙儿拆解下五层电梯PLC程序的实现逻辑。这玩意儿核心是状态转移和信号竞争,咱们直接上硬核部分。(文末附IO表与接线说明)
  • 「码同学」2025VIP性能测试课程
  • 零基础转行AI产品经理:大模型学习路线与面试题库全攻略
  • iOS 组件化:模块拆分、依赖反转、解耦实践