ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux下JDK1.8安装实战:rar解压、环境变量配置与多版本切换

Linux下JDK1.8安装实战:rar解压、环境变量配置与多版本切换 简介Java 开发工具包JDK1.8.0_211 的 Linux x64 平台压缩包面向需要在 Ubuntu 等发行版上搭建 Java 开发环境的开发者与运维人员可免去 Oracle 官网注册与繁琐下载流程解压配置环境变量后即可直接使用。包内共有 1589 个文件以 701 个 jar 类库为核心另含 73 个 so 动态库、230 个 xml 与 49 个 properties 配置描述文件以及 png、html、gif 等文档界面资源jar 支撑程序编译运行so 提供本地能力配置类文件负责参数设定。整体压缩后约 163.34MB目录层次清晰压缩包选自官方发行版文件结构完整便于直接部署或迁移使用同时包含 javac、java、javadoc、jdb、jconsole 等命令行工具并附有 javadoc.1、keytool.1 等 man 手册页便于查阅命令参数与用法。该版本支持 Lambda 表达式、Stream API、方法引用等 Java 8 语言特性并对 JVM 与 G1 垃圾收集器做了优化适合日常开发、调试与项目维护。已有 626 人学习/下载是快速获得 Linux 版 Java 8 开发环境的便捷选择。1. 拿到 jdk1.8.0_211_linux_x64.rar 之后先搞清它在落地流程里的位置JDK 1.8.0_211 是 Oracle 在 2019 年 4 月发布的企业版更新对 Linux x64 来说它常见且有大量存量服务器在用。而 .rar 后缀意味着你拿到的不是官方 tar.gz而是别人用 WinRAR 之类的工具打包过的副本——在离线内网和国产 Linux 镜像站里非常常见。你真正要做的不是「解压」而是把这个包变成一台机器上可用的 Java 运行时解压、校验、配置环境变量、验证移除每一步都藏着一堆能让你翻车的细节。这篇就是顺着你手里的 .rar 包走完整条落地路径并把新手最容易卡住的坑都摆出来照着做就能把 JDK 用起来。适合谁刚接手 Linux 服务器、要给应用装 Java 环境的运维和开发以及在企业内网里被迫用离线包、不能随便上网下载的从业者。如果你已经熟练配置过三个以上版本建议直接跳去第 4 章看多个 JDK 切换的坑。2. 把 .rar 包变成可用的 JDK解压、校验、目录规划2.1 为什么是 .rar 而不是 tar.gz格式决定的处理方式JDK 官方 Linux x64 版本默认发布为jdk-8u211-linux-x64.tar.gz或.rpm当你手里是.rar时基本可以断定这是二次打包产物常见于论坛、百度网盘、企业内部分发。.rar在 Linux 上默认没有解压工具你首先得装 unrar这步就让不少人在最小化安装的 CentOS 上吃瘪——yum 源里没有 unrar 是正常现象得先装 EPEL 或直接编译 rarlab 的源码。我的处理顺序是先确认包的完整性和格式再解压最后做目录规划。别一上来就unrar e很多二次打包的 rar 里可能套着一层目录直接解到当前目录会把bin/、lib/撒得到处都是后面配环境变量时路径乱到怀疑人生。2.2 用 unrar 解压并规整目录三个命令完成落地准备工作确认你已拿到jdk1.8.0_211_linux_x64.rar。下面以 CentOS 7 / Ubuntu 20.04 为例命令大同小异。# 1. 安装 unrarCentOS 用 epelUbuntu 用 apt # CentOS 7 yum install -y epel-release yum install -y unrar # Ubuntu apt update apt install -y unrar # 2. 解压到 /opt 下保留目录结构避免文件散落 unrar x jdk1.8.0_211_linux_x64.rar /opt/ # 解压后检查目录结构 ls -l /opt/jdk1.8.0_211/ # 应该看到 bin/、lib/、include/ 等子目录 # 3. 创建统一符号链接后续升级 JDK 不影响应用配置 ln -s /opt/jdk1.8.0_211 /opt/jdk第一步装 unrar 属于环境准备EPEL 源在国内网络环境经常超时但这不是本文要展开的。第二步用x参数而不是ex会保留 rar 包内的完整路径e会把所有文件解到同一目录后者对 JDK 这种目录结构严苛的包是致命的。第三步是很多有经验的运维会顺手做的创建/opt/jdk符号链接应用和脚本里统一引用这个路径以后升级 JDK 只需要改链接不用改一堆配置。2.3 校验文件完整性用 md5sum 和 sha256sum 确认没解压出坏文件解压后第一时间校验等配置完环境变量才发现核心库损坏就晚了。校验分两层一层是校验原 .rar 文件的散列值是否和发布时一致如果你有办法拿到官方校验值另一层是校验解压出来的bin/java能否正常执行。# 对原文件做散列记录方便溯源 md5sum jdk1.8.0_211_linux_x64.rar # 输出一个 32 位 hex 值保存到文本文件里后续比对 # 关键校验直接双击式检查 Java 可执行文件 /opt/jdk1.8.0_211/bin/java -versionjava -version如果正常输出类似java version 1.8.0_211说明二进制没有硬伤。如果输出Error: could not open ...之类九成是解压时文件损坏或权限不对。这里有个血泪经验在 Windows 上下载 .rar 再传到 Linux传输过程一定要用scp或rsync别用某些 FTP 工具的 ASCII 模式那个会把二进制文件里的字节偷偷改掉玄学故障就来了。3. JAVA_HOME、PATH、CLASSPATH 三个变量一次性配对3.1 为什么环境变量配置失败率这么高三个高频错因搜「jdk环境变量配置失败」的热度常年不减我排查过不少同事的机器错因基本集中在三处。第一处是JAVA_HOME写成了解压路径的末尾带斜杠比如/opt/jdk1.8.0_211/这在拼接$JAVA_HOME/bin时就变成了双斜杠部分脚本会直接认不出。第二处是PATH变量在export时没有引用原有值比如直接export PATH/opt/jdk/bin这会把你系统的ls、cp等基础命令全搞丢——因为PATH不再包含/usr/bin。第三处是改了~/.bashrc后忘了source或者登录 shell 和交互 shell 读的是不同配置.bash_profilevs.bashrc这类问题最容易让人产生「我明明配了为什么不行」的迷惑。3.2 全局配置 vs 单用户配置按场景选择落点如果你的机器是专用开发机只有你自己用配在~/.bashrc里完全是常规操作。但如果是生产服务器或多人共用我强烈建议配在/etc/profile.d/java.sh——这样所有用户登录时都会自动加载不用逐个改 HOME。后一种方式在管理 JDK 版本时也更清晰删掉一个文件就等于撤销配置。# 创建全局配置 sudo tee /etc/profile.d/java.sh EOF export JAVA_HOME/opt/jdk1.8.0_211 export PATH$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar EOF # 使配置生效 source /etc/profile.d/java.sh # 验证 echo $JAVA_HOME which java java -version逻辑说明tee配合 heredoc 可以一次性写入多行配置避免用echo一行行追加的费劲。CLASSPATH最前面有个.当前目录这是为了让你在任意目录都能java运行当前目录下的 class 文件。dt.jar和tools.jar在 JDK 8 里还在lib下如果你配的是 9 以上的版本这两个 jar 已经不存在了但这是 JDK 8 系列的标准配置。参数说明JAVA_HOME是绝对路径不要加/bin后缀。PATH最前面放$JAVA_HOME/bin这样你敲java、javac时优先用这个版本避免系统预装的其他 OpenJDK 抢先。CLASSPATH里的.:必不可少丢失这个点号会导致你编译简单程序时每天都报NoClassDefFoundError。3.3 验证时别只敲 java -version把这套命令走一遍很多教程教你java -version看到输出就完事这远远不够。你要确认javac编译器和jar打包工具都指向同一个 JDK 版本否则会出现编译用 8 的编译器和运行用 11 的运行时这种割裂状态。# 查看 Java 编译器版本必须和运行时一致 javac -version # javac 1.8.0_211 # 查看完整运行时信息 java -XshowSettings:properties -version 21 | grep -E java.home|java.vendor|java.version # 确认 java.home 指向 /opt/jdk1.8.0_211version 是 1.8.0_211 # 写一个小测试类验证编译运行闭环 cat /tmp/HelloJava.java EOF public class HelloJava { public static void main(String[] args) { System.out.println(JDK OK); } } EOF cd /tmp javac HelloJava.java java HelloJava这里的逻辑是双保险java -XshowSettings:properties会把运行时的实际属性打出来用grep过滤出java.home可以看到 JVM 到底用了哪个目录的 javaw。第二个测试代码从编译到运行完整跑一遍只要JDK OK输出出来说明环境变量配置链路是通的。这一步顺手也解决了「找不到 jdk」类的报错——很多 IDEA、JMeter 启动报错都是因为运行时java.home和配置的JAVA_HOME不一致。4. 配置 JDK 1.8 避坑指南五个让你挠头的常见问题排查4.1 现象java -version 显示旧版本配置的新版死活不生效原因PATH里$JAVA_HOME/bin没有排在系统自带 java 前面。很多系统尤其是 CentOS自带 OpenJDK路径在/usr/bin/java而$JAVA_HOME/bin被追加在了PATH末尾shell 会从上到下找第一个 java 执行。解决把export PATH$JAVA_HOME/bin:$PATH里的JAVA_HOME/bin放在最前并且source后执行which java确认指向。这不叫玄学就是PATH查找顺序的字节级细节。4.2 现象unrar命令不存在yum 源里也搜不到原因默认的 base/AppStream 源里没有 unrar 这个包它来自 EPEL 或 RARLAB 官方源。解决先yum install -y epel-release再yum install -y unrar。如果内网服务器不能访问外网下载 unrar 的 RPM 包上传后本地安装。另一个方案是直接用jar解压——JDK 的 .rar 无非是打包过有些包其实是伪装成 rar 的 tar.gz先用file jdk1.8.0_211_linux_x64.rar看真实格式再用对应工具解压我遇到过用file一检测发现是 7z 的情况。4.3 现象环境变量配置后重启终端就失效原因你改的是~/.bashrc但每次登录进的是非交互式 shell比如通过 SSH 执行远程命令而.bashrc内容只在交互式 shell 里加载。解决要么把配置写进/etc/profile或/etc/profile.d/java.sh这两个文件对所有登录式 shell 必读要么在自己的~/.bash_profile里显式source ~/.bashrc。生产服务器上我一般都选/etc/profile.d/因为脚本类任务也读得到。4.4 现象IDEA、JMeter 启动时提示「Unable to locate a Java Runtime」原因这些工具靠读自己的配置文件如idea64.vmoptions或jmeter.bat里的JAVA_HOME来找 JDK全局环境变量不一定能传导进去。解决在工具的启动脚本里显式声明JAVA_HOME/opt/jdk1.8.0_211例如编辑jmeter脚本在export位置加一行。这个坑和系统级配置无关纯粹是应用级 JDK 定位机制。4.5 现象配置了多个 JDK切换后旧项目编译报错 javac 找不到包原因CLASSPATH里没有正确指向当前 JDK 的lib或者多个 JDK 的tools.jar混用了。解决把CLASSPATH里的路径改成$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar不要写死具体版本号目录。切换 JDK 时重新source配置文件并用which java javac同屏对比确认两个命令指向同一版本。5. 用一个可复用脚本管理 JDK 安装和切换顺便避掉升级翻车这一章给你的不是复杂的工具而是一个非常顺手的一键安装脚本它把第 2、3 章的命令整合并支持多版本切换时用update-alternatives做软链管理。你在多台机器上装环境时直接改脚本头部的JDK_DIR变量就能复用。#!/bin/bash # 用法bash jdk_install.sh /path/to/jdk-version set -euo pipefail JDK_PARENT_DIR/opt CURRENT_USER$(whoami) # 1. 解压如果刚好是 tar.gz 格式也能兼容 if [[ $1 *.rar ]]; then unrar x -o $1 $JDK_PARENT_DIR/ elif [[ $1 *.tar.gz ]]; then tar -xzf $1 -C $JDK_PARENT_DIR/ else echo 不支持的压缩格式请提供 .rar 或 .tar.gz exit 1 fi # 2. 找到解压后的实际目录名因为有些包名带了无关前缀 JDK_DIR$(ls -d $JDK_PARENT_DIR/jdk* | head -1) echo 检测到 JDK 目录$JDK_DIR # 3. 写入配置 cat /etc/profile.d/java_switch.sh EOF export JAVA_HOME$JDK_DIR export PATH$JDK_DIR/bin:\$PATH export CLASSPATH.:$JDK_DIR/lib/dt.jar:$JDK_DIR/lib/tools.jar EOF source /etc/profile.d/java_switch.sh # 4. 用 update-alternatives 注册这个版本切换时可以多个共存 update-alternatives --install /usr/bin/java java $JDK_DIR/bin/java 1 update-alternatives --install /usr/bin/javac javac $JDK_DIR/bin/javac 1 # 5. 验证 java -version javac -version echo 安装完成。后续切换版本可用sudo update-alternatives --config java这个脚本的价值不只是免手打命令关键在于用update-alternatives注册版本。当你装了多个 JDK手动改JAVA_HOME很容易忘记同步CLASSPATH里的 lib 路径而这个机制让java和javac直接切换系统里所有调用/usr/bin/java的应用自动跟随。脚本用set -euo pipefail保证任何一步失败就停止不留下半截环境。update-alternatives --config java时会列出已注册的所有版本敲入序号即可切换。切完记得再跑一次java -XshowSettings:properties -version看java.home是否随之改变——这是最容易踩的地方切换后which java指向对了但有的软件直接读系统属性你需要在应用脚本里也更新JAVA_HOME。我自己的习惯是给每个项目配一个setenv.sh里面固定写JAVA_HOME的当前版本避免全局切换影响别的项目。这个维护习惯帮我省掉了至少十次跨环境部署的翻车时间。希望这篇从 .rar 解压到多版本切换的流程能帮你把 JDK 8 的落地速度提上来。JDK 版本管理的核心从来不是装一个包而是让所有进程、脚本、应用都指向同一个它——多花两分钟做校验和注册比事后排查踩坑强得多。本文还有配套的精品资源点击获取
返回列表