首页/新闻资讯/正文详情

Linux 下 tar.gz 安装 JDK 24 与多版本管理实战

发布时间:2026/9/25 1:08:17 来源:云帆数科 栏目:资讯中心
Linux 下 tar.gz 安装 JDK 24 与多版本管理实战
简介jdk-24_linux-x64_bin.tar.gz 是面向 Java 开发者、运维人员及高校学生的 Linux 64 位 JDK 24 官方二进制发行包解压即可使用无需额外安装适合搭建本地开发环境、运行 Java 应用或进行新版本特性验证。压缩包共 405 个文件约 231.9MB包含 71 个 jmod 模块文件、71 个 license 与 70 个 copyright 授权说明、45 个 md 文档、40 个 so 本地库以及 javac、java、jshell、jlink、jpackage、jcmd、jfr、jstat 等核心命令行工具另有 cacerts 证书库、release 版本信息与 modules 模块描述文件覆盖编译、调试、打包、监控全流程。目前已有 116 人学习下载适合需要体验 JDK 24 新特性、构建可移植 Java 运行环境的读者参考使用。1. 拿到 jdk-24_linux-x64_bin.tar.gz 之后先别急着解压很多人拿到jdk-24_linux-x64_bin.tar.gz的第一反应是双击、右键、或者直接tar -zxvf一把梭结果解压完发现java -version还是老版本或者JAVA_HOME指到了系统自带的 OpenJDK 上。这个包本质上是 Oracle 官方提供的 Linux x64 平台 JDK 24 二进制归档解压即用、不写注册表、不依赖包管理器适合需要在同一台机器上并存多个 JDK 版本的场景比如你手头有跑在 JDK 17 上的老项目又想试 JDK 24 的新特性。它解决的核心问题是版本隔离和可控性系统仓库里的 JDK 往往滞后而 tar.gz 包让你把运行时完全握在自己手里。适合谁做 CI 构建的、需要固定 JDK 版本的、以及在国产 Linux 上折腾环境的从业者。但前提是你得先搞清楚这个包到底怎么落地。2. 解压与目录规划把 JDK 24 放到该放的位置2.1 为什么不用系统包管理器装 JDK 24常见做法是apt install openjdk-24-jdk或yum install java-24-openjdk但这条路在多数发行版上走不通——JDK 24 作为较新的非 LTS 版本主流仓库往往还没收录或者收录的是早期访问版。更关键的是包管理器装的 JDK 会注册到/usr/lib/jvm并可能通过update-alternatives抢占默认java一旦你后续想切回 JDK 17就得再走一遍 alternatives 配置容易把环境搞乱。而 tar.gz 包是自包含的解压到哪个目录哪个目录就是它的根不碰系统路径卸载就是rm -rf干净利落。我一般会把所有手动安装的 JDK 统一放在/opt/java/下按版本建子目录这样多版本并存时一目了然。2.2 解压命令与目录结构确认先确认包完整性和目标目录权限。普通用户对/opt没有写权限所以要么用sudo要么解压到自己的家目录。下面以解压到/opt/java/为例# 创建统一存放目录-p 保证父目录不存在时一并创建 sudo mkdir -p /opt/java # 解压 tar.gz 到指定目录-C 指定解压目标-z 处理 gzip-x 解压-v 显示过程-f 指定文件 sudo tar -zxvf jdk-24_linux-x64_bin.tar.gz -C /opt/java/ # 查看解压后的目录名Oracle 的包通常解压出 jdk-24 这样的目录 ls -l /opt/java/解压完成后你会看到/opt/java/jdk-24/这样的目录里面包含bin、lib、conf、include等标准 JDK 结构。bin下就是java、javac、jar、jshell等可执行文件。这里有个细节不同来源的 tar.gz 包解压出的顶层目录名可能不同有的是jdk-24有的是jdk-24.0.1所以下一步配置环境变量前务必用ls确认实际目录名别照着教程硬写路径。2.3 环境变量配置JAVA_HOME 与 PATH 的正确写法环境变量配置失败是最高频的问题根源通常有两个一是JAVA_HOME指向了 JDK 的上级目录而不是 JDK 根目录二是PATH里$JAVA_HOME/bin的顺序被系统路径覆盖。推荐在/etc/profile.d/下建独立脚本而不是直接改/etc/profile这样便于管理和回滚# 创建独立的环境变量脚本文件名以 .sh 结尾才会被 profile.d 自动加载 sudo tee /etc/profile.d/jdk24.sh /dev/null EOF # 指向 JDK 24 的实际根目录注意不要带 /bin export JAVA_HOME/opt/java/jdk-24 # 把 JDK 的 bin 放到 PATH 最前面确保优先于系统自带 java export PATH$JAVA_HOME/bin:$PATH EOF # 给脚本加上可读权限 sudo chmod 644 /etc/profile.d/jdk24.sh # 让当前 shell 立即生效或者重新登录 source /etc/profile.d/jdk24.sh这里的关键参数是JAVA_HOME必须精确到 JDK 根目录PATH拼接时$JAVA_HOME/bin要放在$PATH前面。如果你用的是 zsh 或 fish/etc/profile.d/可能不会被自动加载需要手动在~/.zshrc里 source 这个脚本。配置完用echo $JAVA_HOME和which java双重确认which java应该输出/opt/java/jdk-24/bin/java而不是/usr/bin/java。3. 验证安装与多版本切换别让旧 JDK 抢了默认3.1 三步验证法确认 JDK 24 真正生效装完不验证等于没装。我习惯用三步确认版本、编译器、运行时来源。第一步java -version输出里应该出现24字样第二步javac -version确认编译器也是 24第三步readlink -f $(which java)看实际指向的二进制路径是不是你解压的那个。三步都过了才算真正落地。# 查看运行时版本正常应输出 openjdk version 24 或 java version 24 java -version # 查看编译器版本确认 javac 也来自 JDK 24 javac -version # 追踪 java 命令的真实路径排除 shell 别名或 alternatives 干扰 readlink -f $(which java)如果java -version显示的还是 17 或 11说明 PATH 顺序不对或者系统里存在update-alternatives的软链接优先级更高。这时候不要急着重装先echo $PATH看 JDK 24 的 bin 是否在最前再用type -a java列出所有同名命令的解析顺序问题基本就定位了。3.2 用 alternatives 做多版本共存与切换如果你机器上已经有系统包管理器装的 JDK又想保留它那update-alternatives是更规范的多版本管理方式。它通过维护一组软链接让你用一条命令切换默认 JDK。前提是你得先把手动安装的 JDK 24 注册进去# 注册 JDK 24 的 java 和 javac 到 alternatives优先级设为 2400数值越大优先级越高 sudo update-alternatives --install /usr/bin/java java /opt/java/jdk-24/bin/java 2400 sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk-24/bin/javac 2400 # 交互式选择默认 JDK会列出所有已注册版本 sudo update-alternatives --config java优先级数值只是初始默认值--config时手动选的才会最终生效。这种方式的优点是切换干净缺点是每次装新 JDK 都要注册一遍。我个人的习惯是开发机用 alternatives 管理CI 容器里直接用JAVA_HOME硬指定因为容器里通常只有一个 JDK没必要引入额外抽象层。3.3 写一个最小 Java 程序验证编译运行链路光看版本号还不够得跑通一次完整的编译加运行才能确认javac和java配合没问题。下面这个最小示例顺便验证 JDK 24 的类文件版本// HelloJdk24.java public class HelloJdk24 { public static void main(String[] args) { // 打印运行时版本确认与编译时一致 System.out.println(Java runtime: System.getProperty(java.version)); System.out.println(Java home: System.getProperty(java.home)); } }编译运行两步走javac HelloJdk24.java生成HelloJdk24.class再java HelloJdk24执行。输出里的java.home应该指向/opt/java/jdk-24如果指向别处说明运行时用的还是另一个 JDK编译和运行环境不一致这在排查UnsupportedClassVersionError时是首要检查项。4. 避坑与排查tar.gz 装 JDK 最容易翻车的五个点4.1 现象java -version 还是旧版本 → 原因PATH 顺序或 shell 缓存 → 解决重载配置并清缓存这是最经典的翻车现场。你明明 source 了脚本echo $JAVA_HOME也对但java -version就是不变。原因通常是当前 shell 已经缓存了java命令的路径source不会刷新命令哈希表。解决方法是执行hash -r清空命令缓存或者干脆开一个新终端。另一个可能是/etc/profile.d/脚本没被执行检查文件权限是否为 644、文件名是否以.sh结尾。如果是通过 SSH 登录非交互式 shell 可能不加载 profile.d需要在~/.bashrc里显式 source。4.2 现象JAVA_HOME 配置后某些工具仍报找不到 → 原因工具读的是登录 shell 环境 → 解决区分交互与非交互加载IDE、Maven、Gradle 这类工具启动时读的环境变量来源各不相同。图形界面启动的 IDE 往往不继承终端里的JAVA_HOME需要在 IDE 设置里单独指定 JDK 路径。Maven 的mvn脚本会优先读JAVA_HOME但如果你的JAVA_HOME只在~/.bashrc里 export而mvn由非交互 shell 调用就可能读不到。稳妥做法是把 export 写进/etc/profile.d/或~/.profile覆盖登录和非登录场景。4.3 现象解压报错 gzip: stdin: not in gzip format → 原因文件下载不完整或被重命名 → 解决校验文件类型与大小有时候下载下来的文件其实是个 HTML 错误页只是扩展名被改成了.tar.gz。用file jdk-24_linux-x64_bin.tar.gz看真实类型正常应显示gzip compressed data。如果显示HTML document说明下载源返回了错误页重新下载即可。另外传输过程中断也会导致 gzip 校验失败用gzip -t测试完整性或者对比官方公布的 SHA256 校验值。4.4 现象国产 Linux 上解压后 java 无法执行 → 原因缺少 glibc 依赖或架构不匹配 → 解决确认架构与依赖版本麒麟、统信等国产系统上如果下载的是 x64 包但机器是 arm64java会直接报cannot execute binary file。用uname -m确认架构x86_64对应 x64 包aarch64对应 arm64 包。另外部分精简系统缺少 JDK 运行所需的 glibc 版本ldd /opt/java/jdk-24/bin/java可以查看动态库依赖是否齐全缺库时按提示补装对应版本的 glibc 或 compat 包。4.5 现象磁盘空间莫名被占满 → 原因多版本 JDK 重复解压 → 解决统一目录并清理旧版本一个 JDK 24 解压后大约 300MB 出头如果你在/home、/opt、/usr/local各解压了一份再加上系统自带的几个 G 就没了。我一般只保留/opt/java/一个入口升级新版本时先确认没有进程在用旧版本再rm -rf旧目录。用du -sh /opt/java/*可以快速看各版本占用lsof | grep jdk能查出哪些进程还挂着旧 JDK 的文件句柄。5. 进阶技巧把 JDK 24 塞进容器与 CI 的固定姿势容器和 CI 场景下tar.gz 装 JDK 的玩法跟物理机不太一样。物理机上你关心的是环境变量和切换容器里你关心的是镜像层数、体积和可复现性。常见做法是在 Dockerfile 里用多阶段构建把下载和解压放在一个层里最后只拷贝 JDK 目录到运行镜像。下面这个片段演示了核心思路# 使用一个带 tar 和 curl 的基础镜像做下载解压 FROM debian:bookworm-slim AS jdk-fetch # 把 tar.gz 复制进构建上下文避免构建时依赖外网 COPY jdk-24_linux-x64_bin.tar.gz /tmp/ RUN mkdir -p /opt/java \ tar -zxf /tmp/jdk-24_linux-x64_bin.tar.gz -C /opt/java \ rm /tmp/jdk-24_linux-x64_bin.tar.gz # 运行阶段只拷贝 JDK 目录不带下载工具 FROM debian:bookworm-slim COPY --fromjdk-fetch /opt/java/jdk-24 /opt/java/jdk-24 ENV JAVA_HOME/opt/java/jdk-24 ENV PATH$JAVA_HOME/bin:$PATH这里的关键参数是COPY --from只搬运 JDK 目录下载工具和压缩包不会进入最终镜像体积能省下几十 MB。ENV指令设置的JAVA_HOME会固化在镜像里容器启动时无需再 source 脚本。CI 场景下我一般会把 tar.gz 包缓存到流水线的缓存目录避免每次构建都重新下载同时用sha256sum校验包的一致性防止缓存被污染。验证容器里 JDK 是否正常不要只看java -version还要跑一次编译。因为容器里可能缺libc的某些组件java -version能过但javac不一定能跑。我习惯在 CI 里加一步javac -version java -version双检查再跑一个最小类的编译执行确保整条链路可用。从那以后我每次在容器里装 JDK都强制走一遍「版本 编译 运行」三连不再只信一个java -version。希望帮到你。本文还有配套的精品资源点击获取

相关推荐

创维E900-S刷机全攻略:MSO9280芯片TTL线刷与固件写入实战
创维E900-S刷机全攻略:MSO9280芯片TTL线刷与固件写入实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:08:17

AUTOSAR CanNm网络管理实战:报文结构、状态机与配置调试
AUTOSAR CanNm网络管理实战:报文结构、状态机与配置调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:08:17

7-Zip实战指南:提升压缩率、加密分卷与命令行批量处理
7-Zip实战指南:提升压缩率、加密分卷与命令行批量处理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:08:17

微信读书电子书导出工具:开源方案实现EPUB/PDF本地化
微信读书电子书导出工具:开源方案实现EPUB/PDF本地化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:49:19

STM32从选型到实战:时钟树、中断、外设与避坑指南
STM32从选型到实战:时钟树、中断、外设与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:49:07

CST Studio Suite 2026安装教程:环境配置、许可证激活与性能调优
CST Studio Suite 2026安装教程:环境配置、许可证激活与性能调优

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:49:07

Python+Django视频点播系统源码:毕业设计快速搭建与避坑指南
Python+Django视频点播系统源码:毕业设计快速搭建与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:49:07

Spring Boot二手车交易系统毕业设计:从技术选型到答辩避坑指南
Spring Boot二手车交易系统毕业设计:从技术选型到答辩避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:49:07

Proteus 8.11安装与仿真验证全指南
Proteus 8.11安装与仿真验证全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:49:07

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码