Linux 统一方式安装多版本 JDK 指南

说实话,在Linux下管理多个版本的JDK时,我遇到了很多困难。
纯压缩包安装确实很灵活,但是细节很多,特别是环境变量和选项的关系,很容易出现bug。

看我的方法,从卸载旧版本开始尤为重要。
我曾经有一个客户,他的系统中还剩下 RPM 包 7 和 8 ,但在安装较新版本时总是出现冲突。
使用安装 yum 列表。
grep java 必须先扫描它并卸载不需要的版本。
这肯定会节省时间。
记得在卸载命令中添加-y,否则交互式确认会很烦人。

在创建集成安装目录/opt/jdk时,我习惯使用mkdir -p来防止路径不存在时出现错误。
我在一家大型制造商的项目中使用了这个目录结构。
将不同版本放在子目录中,可以非常方便地迁移和清理后续版本。
权限 chmod 7 5 5 是标准的,子目录也应该递归设置。

在下载包的这个阶段,不要从官网一一下载。
我通常使用脚本或 wget 来批量执行此操作。
比如JDK8 的jdk-8 u4 4 1 -linux-x6 4 .tar.gz,我保存在/data/jdk下。
使用 tar -xzvf 解压该命令。
关键是--strip-component=1 我已经无数次使用这个参数了。
它可以去掉顶层目录,直接将bin和lib移动到目标路径。
这样就省去了后期手动排序的需要。
我的一个朋友忘记添加了,结果/opt/jdk/8 下有一堆jdk-8 u4 4 1 -linux-x6 4 文件夹,看起来很乱。

环境变量是配置起源的根源。
我建议直接从 /etc/profile.d/jdk.sh 注释掉 JAVA_HOME 和 PATH 并仅依赖于选项。
我遇到过你所描述的问题。
硬编码的 JAVA_HOME 始终具有最高优先级。
那个jdk函数写得很好。
可以使用case语句进行切换,也可以添加full -W "8 1 7 2 1 " jdk来实现tab补全。
用起来很棒。
但最重要的是选项必须正确配置。

在--install命令中看到这个选项,--slave参数不能缺少。
上次我忘记在CentOS 6 系统上添加--slave。
结果javac命令消失了,编译崩溃了。
注册新版本之前必须执行sudo选项--remove-all java命令,否则会报“目标已存在”。
我有一个客户忘记了这一步,导致和Options--Install发生冲突,纠结了好久。

验证 Java 切换功能时,选项 --config 特别直观。
在测试环境中,我使用这个命令将版本从8 切换到2 1 ,然后java-version立即显示2 1 ,非常稳定。
不过使用脚本功能jdk 2 1 切换时,需要先记住源码/etc/profile.d/jdk.sh才能使配置生效,否则您可能暂时看不到更改。

我已经尝试过问题摘要中提到的两种解决方案。
方案一比较干净,完全依赖选项,适合采用最少管理的环境。
方案2 保留环境变量,但是动态更新选项,更加灵活,但是脚本更加复杂。
我更喜欢选项1 ,因为该选项是为系统级版本管理而设计的,硬编码很容易出错。

归根结底,多版本JDK管理是一项细致的工作。
如果任何一个环节不处理好,整个环节都可能崩溃。
我已经在多个生产环境中使用过这种方法,没有出现任何重大问题。
但不同版本的Linux可能存在缺陷。
例如,某些较旧的系统选项可能有不同的选项。
我自己没试过。
我记得的资料是CentOS 7 以上支持的很好,不过建议你检查一下你的环境的具体情况。

如何在Linux系统中快速更新Java版本

上星期。
系统包管理器。
更新Java。
非常方便。

2 02 3 Debian 系统。
使用apt。
没问题。

我的那个朋友。
RHL 系统。
使用dnf。
好吧。

手动安装。
甲骨文JDK。
需要注册。
有点不舒服。

/usr/local/java.lang.解压 JDK。
记住路。

/etc/profile.d。
创建脚本。
配置JAVA_HOME和PATH。
完成的。

更新替代方案。
注册JDK。
转换版本。
便于使用。

系统级别。
全球转型。
sudoupdate-alternatives--configjava。

项目级别。
本地切换。
指定了 JAVA_HOME。
好吧。

算了。
选择哪种方式?这取决于需要。