OpenJDK在RPM系系统中怎么用alternatives切换版本

星强君_3752

星强君_3752

2026-11-09

415人浏览

原创

可直接用 update-alternatives --config java 和 --config javac 切换,但必须确保二者注册路径一致、优先级不重复,且手动注册时需指向同一JDK的bin/java和bin/javac,再同步选择相同编号,最后手动更新JAVA_HOME以保证环境变量与命令一致。

openjdk在rpm系系统中怎么用alternatives切换版本

直接用 update-alternatives --config java 和 update-alternatives --config javac 就能切换,但必须确保两者注册路径匹配、优先级不重复,否则运行和编译会用不同 JDK。

确认已安装的 JDK 路径是否被 alternatives 管理

在 CentOS/RHEL/Fedora 上,用 yum 或 dnf 安装的 OpenJDK(如 java-17-openjdk-devel)通常会自动注册 java 和 javac;但手动解压或 RPM 包(如 Liberica、Temurin)往往不会。

检查是否已注册:

  • 运行 update-alternatives --list java —— 若报错 “no alternatives”,说明未注册
  • 运行 ls /usr/lib/jvm/ 查看实际目录,常见名如 java-17-openjdk-17.0.1.0-10.el9_4.x86_64(RHEL/CentOS 9+)或 jdk-17.0.1+12(手动解压)
  • 注意:RPM 系统中 JDK 主目录常带版本号和构建后缀,bin/java 路径需完整写对,不能只写到 /usr/lib/jvm/java-17-openjdk

手动注册 java 和 javac 到 alternatives(关键步骤)

注册时必须同时处理 java 和 javac,且指向同一 JDK 根目录下的对应二进制文件,否则 java -version 和 javac -version 会不一致。

以 RHEL 9 安装的 OpenJDK 17 为例(路径需按 ls /usr/lib/jvm/ 输出实际调整):

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-openjdk-17.0.1.0-10.el9_4.x86_64/bin/java 1700
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-17-openjdk-17.0.1.0-10.el9_4.x86_64/bin/javac 1700

要点:

  • 优先级数字(如 1700)必须唯一,建议按版本逻辑设:JDK 8 用 1080,JDK 17 用 1700,JDK 21 用 2100
  • 若注册的是手动解压的 JDK(如 Temurin),路径类似 /usr/lib/jvm/jdk-17.0.1+12/bin/java,注意别漏掉 bin/ 子目录
  • 不要注册 jre/bin/java(旧式路径),RHEL 8+ 的 OpenJDK 包已取消独立 JRE 目录,一律用 bin/java

执行切换并验证一致性

注册完成后,分别执行两个命令进入交互选择:

sudo update-alternatives --config java
sudo update-alternatives --config javac

必须为两者选**同一个编号**(即同一 JDK 实例),否则会出现“运行是 17,编译是 11”这类问题。

验证是否同步生效:

  • 运行 java -version 和 javac -version —— 输出主版本号应完全一致
  • 运行 readlink -f $(which java) 和 readlink -f $(which javac) —— 应指向同一 JDK 的 bin/ 下
  • 如果用 Maven 构建项目,还需确认 mvn -v 显示的 Java 版本与上述一致(Maven 本身不读 alternatives,但依赖系统 java 命令)

JAVA_HOME 不会自动更新,得手动配或靠脚本

update-alternatives 只改命令软链接,不碰环境变量。所以 $JAVA_HOME 仍可能是旧值,导致 IDE 或构建工具误判。

解决办法(任选其一):

  • 在 /etc/profile.d/java.sh 中加一行:export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java)))),然后 source /etc/profile.d/java.sh
  • 或用 alternatives --display java 查当前选中路径,手动设 JAVA_HOME 指向其父目录(如 /usr/lib/jvm/java-17-openjdk-17.0.1.0-10.el9_4.x86_64)
  • 注意:RHEL/CentOS 的 /etc/java/ 下可能有 java.conf,但该文件不被 alternatives 自动读取,别指望它生效

最易忽略的是 JAVA_HOME 和 java/javac 不同步——尤其在 CI/CD 或 systemd 服务里,环境变量继承自系统配置而非当前 shell,这点比桌面终端更敏感。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

40

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

20

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

20

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

40

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

40

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

40

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

40

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

40

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
OpenJDK项目Wiki
OpenJDK项目Wiki

共0课时 | 0人学习

OpenJDK构建指南
OpenJDK构建指南

共0课时 | 0人学习

OpenJDK官网文档
OpenJDK官网文档

共0课时 | 0人学习