JDK 24 Linux tar.gz 下载安装配置全攻略,环境变量与多版本切换详解
简介本资源为 Oracle 官方发布的 JDK 24 Linux x64 平台标准二进制发行版面向 Java 开发者、系统运维工程师及高校计算机专业师生用于搭建最新 LTS 前沿版本的 Java 运行与开发环境。压缩包共含 405 个文件涵盖 71 个 jmod 模块文件支撑 JLink 自定义运行时镜像、71 份 license 与 70 份 copyright 法律合规文件、45 份 Markdown 格式文档含 API 变更说明与迁移指南以及核心可执行工具如 java、javac、jshell、jfr、jpackage、jwebserver 等及其 man 手册.1 文件、本地化资源与安全配置cacerts、java.security、*.policy。整体包体大小为 231.9MB结构规范、开箱即用完整保留 JDK 24 的模块化布局与原生工具链。目前已有 114 人学习下载适合需要体验虚拟线程增强、结构化并发、未命名变量与模式匹配等 JDK 24 新特性的开发者快速部署验证环境。jdk-24_linux-x64_bin.tar.gz 从下载到配置这篇把 Linux 装 JDK 的坑一次说透看到jdk-24_linux-x64_bin.tar.gz这个文件名估计不少刚接触 Linux 的同学有点发怵——名字里每个单词都认识但合在一起就不知道从哪下手。这其实就是一个标准的 JDK 24 安装包面向 Linux x64 平台采用 tar.gz 压缩格式发布。比起 Windows 上的 exe 安装包tar.gz 是个免安装的绿色版解压就能用配置也全靠自己动手所以很多第一次用 Linux 的朋友会在这里卡住。这篇博文我从实际运维和开发的角度把 JDK 24 的下载、校验、解压、目录规划、环境变量配置、多版本切换到常见故障排查全流程过一遍。你不需要有深厚的基础只要会敲 Linux 命令跟着步骤走就能把环境跑起来。这篇文章既适合刚转到 Linux 开发的新手也适合要给服务器或本机装 JDK 的运维、测试、数据分析同学参考。1 下载前必须想清楚的几件事1.1 为什么选 tar.gz 而不是 rpm 或 deb在 README 或官网下载页上你通常会看到多种格式的 JDK 包。很多第一次接触的人会直接问既然有 rpm 和 deb为什么还要折腾 tar.gz关键原因在于使用场景和权限控制。rpm 和 deb 是发行版自带的包管理格式安装后会按照系统规范把文件散落到/usr/lib/jvm、/etc/profile.d等目录还有专门的卸载和升级机制。对这些格式你需要 root 权限而且安装位置、JDK 的默认路径基本由系统决定。tar.gz 则完全是个绿色软件包解压到任意目录就能用不写入系统目录、不污染其他环境适合需要在多个 JDK 版本之间切换、或者没有 root 权限的普通用户场景。还有一个很实际的优势同一份 tar.gz 包放到 CentOS、Ubuntu、Debian、openEuler 上都能直接解压运行不受发行版包管理器的限制。rpm 在 Debian 系上就跑不动deb 在 Red Hat 系上也不行。所以如果你经常在多台不同发行版的机器上部署环境tar.gz 是通用性最强的方案。1.2 下载渠道的选择与校验JDK 24 的发布渠道有几种Oracle 官方需要登录 Oracle Account、Adoptium也就是 Eclipse Temurin完全开源免费、Azul Zulu、Amazon Corretto 等。从实用角度我个人建议优先用 Adoptium原因很简单它提供长期支持、免费商用、更新及时而且没有 Oracle 官方那个登录墙。下载时直接抓 API 返回的 tar.gz 链接# 以 Adoptium API 为例下载 JDK 24 的 Linux x64 包 wget https://api.adoptium.net/v3/binary/latest/24/ga/linux/x64/jdk/hotspot/normal/eclipse如果确实需要 Oracle 版本需要注意 Oracle 官网下载的时候有 cookie 校验直接 wget 链接经常返回 403。解决办法是先让浏览器完成下载或者用带 User-Agent 的 wget 参数。不过社区贡献的 OpenJDK 构建在绝大多数场景下已经够用了。下载完成之后务必做完整性校验。tar.gz 包如果在中途断点续传后损坏解压时会报gzip: invalid compressed data之类的错误所以最好下载对应的.sha256校验文件或拿到官方 SHA-256 摘要# 计算本地文件哈希 sha256sum jdk-24_linux-x64_bin.tar.gz # 将输出与官方公布的摘要比对一致再继续后续操作1.3 确认你的 Linux 是 x64 还是 ARM64标题里的x64指的是 CPU 架构。现在不少开发者在 ARM 架构的机器上跑 Linux比如 Apple Silicon 的虚拟机和部分国产 ARM 服务器这种情况下安装 x64 包会直接报 Exec format error 或者 cannot execute binary file。所以拿到包之前先确认一下系统架构uname -m # 输出 x86_64 说明是 x64 架构 # 输出 aarch64 说明是 ARM64需要下载 aarch64 版本这一步看着简单但很多项目部署出问题就栽在架构不匹配上。JDK 24 官方同时发布了 x64 和 aarch64 的 tar.gz 包命名规律一致只有架构字段不同按照系统实际架构选包就不会错。2 解压安装与目录规划实操2.1 安装目录放哪里比较合适tar.gz 不需要运行安装程序解压即完成安装但放到哪个目录还是有讲究的。Linux 下常见的 JDK 安装目录有几种选择/usr/lib/jvm很多发行版默认 JDK 位置适合 rpm/deb 安装的场景/opt/java或/opt/jdk第三方软件普遍推荐的安装目录~/jdk或~/tools/jdk用户级安装不需要 root 权限我个人的习惯是统一放在/opt/java下因为这个目录本身就用于存放独立于系统包的第三方软件权限清晰、结构统一。如果你是没有 root 权限的普通用户那就放自己的家目录原理一样。先创建目录然后把安装包传过去本地文件用 scp 或 U 盘服务器上也可以直接从网络拉取# 创建安装目录需要 root 权限 sudo mkdir -p /opt/java # 将安装包复制到 /opt/java或用 wget 直接下载到该目录 # 下面切换到安装目录并解压 cd /opt/java tar -xzf jdk-24_linux-x64_bin.tar.gz解压之后会在/opt/java下生成一个jdk-24之类的目录这个就是 JDK 的主目录也叫做 JDK 的根目录JAVA_HOME指向的就是它。2.2 解压后目录结构长什么样解压完成之后进入jdk-24目录用ls -l看一下你会看到下面这些核心子目录目录作用bin存放所有可执行工具包括java、javac、javap、jar等lib存放动态链接库、类库modules文件也在里面conf存放 JDK 的配置文件如security/java.security、logging.propertiesinclude存放 C 语言头文件用于 JNI 开发legal存放各类开源许可证jmods存放 JMOD 格式的模块文件用于 jlink 自定义运行时man存放 man 手册方便man java查看帮助对于日常使用者来说最重要的是bin目录。这里面的文件就是将来输入java、javac时实际执行的程序。有个细节值得注意bin下的java本身是一个启动器它负责加载 JVM然后根据java命令后面的参数运行对应的类或 jar 包。这个启动器会从JAVA_HOME或java可执行文件自身所在路径反推 JDK 根目录这也是为什么我们要把JAVA_HOME设置准确。2.3 解压之后的权限问题解压时用的是tar文件的属主会保留打包时的用户。如果解压时用的是普通用户那文件属主就是你自己这对用户级安装没问题如果是在/opt/java下用 root 解压的普通用户理论上也能读能执行只是没有写的权限。实际开发中经常会遇到一种情况IDE 或构建工具需要对 JDK 的某些目录有写权限比如 JVM 在特定场景下会生成临时文件或者你要在同一台机器上给多个用户共享这个 JDK。这时候可以修改目录属主或者至少保证其他用户有r-x权限。一劳永逸的做法是# 将 jdk-24 目录属主改成 linux 用户方便统一管理 sudo chown -R linux:linux /opt/java/jdk-24如果不想改属主确保目录权限为 755 也能正常使用sudo chmod -R 755 /opt/java/jdk-24。3 环境变量配置让系统找到 java 命令3.1 理解 PATH 和环境变量的关系解压只是把 JDK 文件放在磁盘上系统并不知道去哪里找java。你直接敲java -version大概率会得到command not found。原因很简单Shell 执行命令时会在PATH环境变量列出的目录里逐一搜索可执行文件而/opt/java/jdk-24/bin并不在默认的PATH中。我们需要做的有两件事一是把 JDK 根目录记录下来也就是设置JAVA_HOME环境变量方便其他依赖 JDK 路径的工具如 Maven、Gradle、IDEA查找二是把$JAVA_HOME/bin加到PATH中让 Shell 能找到java、javac这些命令。这里有个概念要区分清楚JAVA_HOME是很多 Java 生态工具比如 Maven、Tomcat读取的约定环境变量JDK 自己并不强制依赖它而PATH才是系统解析命令时实际查找的路径列表。所以两个都要配缺一个都会在后续使用中踩坑。3.2 配置文件的选用与全局 vs 用户级Linux 下配置环境变量的文件有很多个选错文件会出现明明配了却不生效或换个用户就找不到 java的诡异情况。简单区分一下/etc/profile系统级所有用户登录时都会加载通常还会加载/etc/profile.d/下的脚本/etc/profile.d/*.sh系统级脚本目录比直接改/etc/profile更规范~/.bashrc当前用户每次打开新终端时加载~/.bash_profile或~/.profile当前用户登录时加载推荐做法是在/etc/profile.d/下新建一个专门的脚本文件例如java.sh。这样既实现系统级配置又不会把/etc/profile改得乱七八糟升级或卸载时直接删掉一个文件就行# 创建脚本需要 root 权限 sudo vim /etc/profile.d/java.sh写入以下内容export JAVA_HOME/opt/java/jdk-24 export PATH$JAVA_HOME/bin:$PATH如果只是在个人用户下开发不涉及多用户也可以把上面两行写入~/.bashrc末尾效果一样只是作用域不同。注意PATH$JAVA_HOME/bin:$PATH里$PATH一定要放在后面这样才能把 JDK 的命令放在搜索路径的前面避免系统里其他版本的 java比如/usr/bin/java抢先被找到。这是一个常见但很容易被忽视的细节。3.3 让配置立即生效并验证安装结果修改完配置文件之后不会立即生效需要重新加载。重新登录当然可以但更快速的办法是用source命令source /etc/profile.d/java.sh如果是在~/.bashrc里配置的就执行source ~/.bashrc然后验证安装结果。依次执行下面几条命令java -version javac -version which java echo $JAVA_HOME正常情况下java -version会输出类似下面的信息openjdk version 24 2025-03-18 OpenJDK Runtime Environment (build 2436-...) OpenJDK 64-Bit Server VM (build 2436-..., mixed mode, sharing)which java应该指向$JAVA_HOME/bin/java而不是/usr/bin/java或其他路径。如果这些都对了说明 JDK 24 已经在当前 Shell 环境中正常工作。3.4 为什么 javac 和 java 版本要一致在排查环境问题时很多人会单独执行java -version和javac -version发现竟然不一样。这种情况多出现在系统里同时安装了多个 JDK或者是JAVA_HOME指向的目录里没有javac只有 JRE。JDK 24 已经把 JRE 和 JDK 合并发布不再单独提供 JRE 下载所以正常情况下bin目录里是同时有java和javac的。如果你输入javac时报command not found而java正常说明JAVA_HOME指错了位置或者 PATH 搜索到了别的 java。解决办法是检查JAVA_HOME路径下是否存在bin/javac并把 PATH 顺序理清楚。4 多版本 JDK 共存与灵活切换4.1 一个系统装多个 JDK 是常态现实中很多开发者的机器上不止一个 JDK。老项目跑在 JDK 8 上新项目要求 JDK 17 或 21现在又来了 JDK 24想尝鲜又不敢全量迁移。tar.gz 解压即用的特性让多版本共存变得异常简单每一个版本就是一个独立目录互不干扰。以我目前的机器为例/opt/java下有jdk-8、jdk-17、jdk-21、jdk-24四个目录每个都是完整独立的 JDK。需要切换时只要修改JAVA_HOME和PATH的指向即可整个过程不涉及任何卸载操作。4.2 使用 alternatives 管理全局版本在 Red Hat 系CentOS、Rocky、Fedora和部分 Debian 系系统上update-alternatives是管理默认命令版本的规范工具。它通过软链接的方式把/usr/bin/java、/usr/bin/javac这些命令链接到指定 JDK 的可执行文件上。先手动注册 JDK 24 到 alternativessudo update-alternatives --install /usr/bin/java java /opt/java/jdk-24/bin/java 1 sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk-24/bin/javac 1然后通过下面的命令交互式选择默认版本sudo update-alternatives --config java sudo update-alternatives --config javac执行后系统会列出所有已注册的 Java 版本输入对应编号回车即可切换。这个方案适合系统级默认版本的管理但对普通用户来说有点重而且每次都只对当前注册的命令生效环境变量JAVA_HOME不会自动跟着变。4.3 轻量级手动切换法我个人更常用的是写一个切换脚本或者直接在~/.bashrc里维护几个函数让切换变成一条命令的事。下面是核心逻辑做法是定义一个别名或函数动态修改JAVA_HOMEsetjdk() { if [ -d /opt/java/jdk-$1 ]; then export JAVA_HOME/opt/java/jdk-$1 export PATH$JAVA_HOME/bin:$PATH java -version else echo 未找到 /opt/java/jdk-$1 目录 fi }把这个函数放到~/.bashrc里然后执行source ~/.bashrc # 切换到 JDK 17 setjdk 17 # 切回 JDK 24 setjdk 24这种方式的好处是切换只影响当前用户、当前 Shell不会影响系统其他用户切换速度也快不依赖 root 权限特别适合在同一台机器上并行开发多个项目的场景。实际使用时项目 A 的终端开一个窗口切到 JDK 17项目 B 的终端开另一个窗口切到 JDK 21互不干扰。4.4 JAVA_HOME 泄露问题排查切换 JDK 的时候容易忽略一个重要细节——JAVA_HOME的环境变量可能在其他地方被写死了。比如很多 IDE 的启动脚本、构建工具的setenv.sh、或者容器镜像里的 ENV 指令都会显式指定JAVA_HOME。这就导致你终端里手工切换成功了但启动 Tomcat 或运行 Maven 时它读到的仍是配置文件中写死的路径。遇到这种情况多方位确认当前实际生效的 JAVA_HOME# 检查当前 shell 里的值 echo $JAVA_HOME # 检查是否有全局配置覆盖 grep -r JAVA_HOME /etc/profile /etc/profile.d/ ~/.bashrc ~/.bash_profile 2/dev/null如果构建工具是 Maven再看一下$MAVEN_HOME/bin/mvn脚本里的 JAVA_HOME 逻辑。很多启动脚本会优先读取自己的配置文件而不是直接使用系统环境变量。5 常见问题与排查技巧实录5.1 java -version 显示旧版本这是最经典的问题你明明安装了 JDK 24也配置了环境变量但一敲java -version显示的却是 1.8 或 11。原因基本可以锁定在 PATH 搜索顺序上。Shell 查找命令时是按照PATH变量中目录的先后顺序逐一搜索的如果/usr/bin/java排在$JAVA_HOME/bin前面那么系统找到的永远是/usr/bin/java。排查步骤# 1. 看当前用的 java 是哪个路径 which java # 2. 查看 PATH 中目录顺序 echo $PATH # 3. 查看系统默认安装的 java ls -l /usr/bin/java*解决办法是把$JAVA_HOME/bin放在 PATH 最前端同时彻底移除其他版本的软链接配置。如果系统里存在/usr/bin/java这类软链接必要时可以用sudo unlink /usr/bin/java移除前提是确认不需要系统自带的版本。5.2 source 之后仍然 command not found配置写了source也执行了但一开新终端又找不到 java。这种情况十有八九是配置写入的文件不对。例如你把配置写进了~/.bashrc但当前用户使用的是 zsh那么新打开的 zsh 终端不会加载.bashrc只会加载~/.zshrc。解决办法是把配置写入~/.zshrc或者在.zshrc中显式添加source ~/.bashrc。如果是登录 Shell 的环境比如通过 SSH 登录可能还需要看一眼~/.bash_profile或/etc/profile的加载路径。一般~/.bash_profile里默认会加载~/.bashrc但如果被自定义修改过就可能跳过。5.3 报错 Cannot execute binary file这个报错基本可以断定是架构不匹配。你把 x64 的 tar.gz 包解压到了 ARM64 系统上直接运行二进制文件就会遇到这个错误。确认方式uname -m file /opt/java/jdk-24/bin/javafile命令会输出这个二进制文件的架构信息如果是x86-64但系统是aarch64下载对应 aarch64 版本重新解压即可。5.4 字符编码和 locale 警告Java 启动时偶尔会输出类似下面的警告Picked up JAVA_TOOL_OPTIONS: -Dfile.encodingUTF-8这通常是因为环境变量JAVA_TOOL_OPTIONS被设置了或系统 locale 配置不完整。如果影响不大可以忽略但如果你希望彻底控制编码行为可以使用JAVA_TOOL_OPTIONS或_JAVA_OPTIONS设置 JVM 参数export _JAVA_OPTIONS-Dfile.encodingUTF-8不过这里有个坑设置_JAVA_OPTIONS之后每次运行 java 命令都会在控制台输出一行提示有些脚本在解析输出时会出问题。如果不需要特殊参数可以不设置它保持默认即可。5.5 普通用户装完没有写权限开发时经常遇到 IDE 或构建工具往~/.m2、/tmp等目录写缓存这跟 JDK 安装目录本身没有直接关系。但如果你的项目用到了 jlink 自定义运行时或者某些框架需要写 JDK 的lib目录就会遇到权限不够的问题。JLink 在生成自定义运行时时默认会写到当前用户目录不会动 JDK 本体所以这种情况相对少见。遇到时用chown或chmod调整 JDK 目录权限或者直接在项目目录下操作不要依赖修改 JDK 本体目录。5.6 图形界面程序启动异常如果只用java -jar跑普通的命令行程序或服务器不用关心图形界面。但在 Linux 桌面环境跑 JavaFX 或其他 GUI 程序时可能会遇到缺少图形库的报错比如java.lang.UnsatisfiedLinkError或者无法连接 X server。这是系统层面的依赖问题跟 JDK 24 本身无关需要安装对应的图形库如libX11、libXext、libXi和字体库# Debian/Ubuntu 示例 sudo apt install libx11-dev libxext-dev libxi-dev libxtst-dev libxrender-dev # Red Hat/CentOS 示例 sudo yum install libX11-devel libXext-devel libXi-devel libXtst-devel libXrender-devel6 实际使用中的几点补充建议写到这里JDK 24 tar.gz 安装和配置的核心流程已经完整走了一遍。最后补充几个我在实际环境中常用的习惯不算教程但能帮你少走弯路。第一个习惯是安装完立刻用java -XshowSettings:properties -version看一遍 JVM 的默认属性。这条命令会输出java.home、java.version、java.class.path、user.dir等关键信息比单纯-version确认得更细致。如果看到java.home不是你的预期路径说明JAVA_HOME或 PATH 还有问题趁早查不然等跑起项目再发现就晚了。第二个习惯是写一个简单的检查脚本把验证命令串起来避免每次装完 JDK 都手敲一遍。比如#!/bin/bash echo JAVA_HOME$JAVA_HOME which java java -version 21 javac -version 21保存为check-jdk.sh以后换新机器、新服务器一条命令就能确认环境是否就绪。第三个习惯跟 IDE 有关。无论你用 IDEA 还是 Eclipse建议在 IDE 里手动指定 JDK 路径而不是完全依赖系统环境变量。比如在 IDEA 的Project Structure - SDKs里新增一个 SDK路径填/opt/java/jdk-24。这样做的好处是 IDE 有自己的 JDK 缓存体系即使系统默认 JDK 切换了项目构建也能保持稳定不会被环境变量变化波及。最后一个提醒是升级节奏。JDK 24 属于非 LTS 版本后续 JDK 25 LTS 发布后长期项目建议优先考虑 LTS 版本。不过如果你只是想在本地体验新特性或者项目用到的框架已经支持那么 JDK 24 完全可以直接使用。安装方式一模一样只是解压目录换个名字而已。本文还有配套的精品资源点击获取