
简介面向Linux 64位系统开发者的JDK 18免安装压缩包解压后即可获得完整的Java 18运行时与开发工具链免去在线安装或手动编译源码的繁琐环节尤其适合需要快速搭建本地开发环境、持续集成节点或云服务器Java运行环境的初级至中级开发者。包内共387个文件既包含jmod模块文件、so动态库、jar核心库、javac/java等常用命令行工具也涵盖security/policy安全配置、license版权声明与md说明文档整体约174.31MB目录结构遵循标准JDK布局可按需检索。资源附带清晰的JAVA_HOME、path、classpath配置说明照此填写环境变量即可让工具链正常运行便于无缝接入Maven、Gradle等Java生态。该资源已有876人学习下载对希望避免Oracle官网繁琐下载流程、快速获得开箱即用JDK 18环境的Linux用户是一份省时高效的实用工具包。1. 解压即装的 JDK 18Linux 上最值得掌握的安装方式第一次在 Linux 上装 JDK 的人常常被.tar.gz这个格式劝退没有双击、没有安装向导下载完一个几十 MB 的包不知道往哪放。实际上Linux 下用压缩包装 JDK 才是默认且最透明的方式。JDK 18 的官方 Linux 64 位压缩包下载下来解压、配环境变量、验证版本三步就完事。不需要 root 也能装在家目录不会污染系统包管理器切换版本时删目录、换链接即可比 rpm/deb 那种“偷偷写入 /usr/lib/jvm”的方式更容易掌控。这篇文章面向两类人刚接触 Linux 的开发者以及要在多台服务器上批量部署 Java 运行时的运维工程师。2. 64 位 JDK 与 tar.gzLinux 上选装 JDK 18 的底层判断2.1 先搞清楚你下载的是不是 64 位包JDK 18 的官方压缩包命名很直白例如jdk-18_linux-x64_bin.tar.gz。其中x64就是 x86_64 架构也就是几乎所有人的 PC 和服务器都在用的 64 位指令集。还有一类常见的是aarch64对应 ARM 架构的服务器例如鲲鹏、飞腾这些国产芯片平台。uname -m这条命令会输出x86_64或aarch64也可能输出arm64之类的结果。下载压缩包之前先跑一次比下载完才发现“bad ELF interpreter”要省事得多。很多 Linux 新手在下载 Java 时纠结 32 位还是 64 位其实现在主流发行版都已经全面 64 位化除非你在老旧的 32 位系统上跑旧业务否则一律选 x64。32 位 JDK 在 64 位系统上能跑但堆内存上限低、性能和稳定性都吃亏没必要给自己找麻烦。表JDK 18 压缩包常见的平台标识标识对应 CPU 架构常见发行版场景x64 / x86_64Intel、AMD 64 位绝大多数 PC 和云服务器aarch64ARM 64 位国产化服务器、部分云上 ARM 实例2.2 为什么压缩包比 rpm/deb 更适合 JDK 18Linux 发行版对 .deb 和 .rpm 的态度是“帮你管理”但 JDK 又偏偏是个目录即程序的运行时。rpm 安装 JDK 18 时包管理器会把它写进/usr/lib/jvm/再通过alternatives注册到系统级 PATH看起来省心实际上有很多隐藏问题官方 Oracle JDK 的 rpm 包在部分发行版上依赖不完整升级系统时可能被连带卸载而且是全局生效你没法在一个普通用户目录里维护自己习惯的 JDK 版本。压缩包则完全不同。tar.gz只是把 JDK 18 目录打了个包解压到任意路径就能用唯一的“安装”动作就是设置JAVA_HOME和PATH。整个安装过程透明可见卸载时删除目录、清掉环境变量不留任何残留。提示解压即装并不代表目录随便放。我一般统一放在/usr/local/java/下每个版本一个子目录便于集中管理和后续切换。2.3 JDK 18 不是 LTS目录隔离反而更重要JDK 18 是 2022 年 3 月发布的非长期支持版本到 2022 年 9 月就结束公开更新之后的安全补丁只面向商业订阅用户。所以很多团队在 JDK 18 上跑了一段时间后会降级回 JDK 17或者再升到 21。如果当初是用 rpm 装的降级就要先卸载干净搞不好还会残留旧配置要是用压缩包安装只需要把当前目录从jdk-18切回jdk-17环境变量指向一变重启应用就完成版本切换。这也是我在生产环境更倾向压缩包的原因非 LTS 版本的寿命短目录化管理让版本升降级都变成“改链接、改变量”级别的操作而不是“重装系统组件”。3. 解压安装 JDK 18 的可复现流程下载、目录规划、profile 与环境变量3.1 下载 JDK 18 压缩包认准官网与镜像校验下载 JDK 18 时建议直接从官方归档页或可信镜像站拿jdk-18_linux-x64_bin.tar.gz。用wget下载时加上-c参数防止大文件下载中断后重头再来mkdir -p ~/downloads cd ~/downloads wget -c JDK 18 Linux x64 Compressed Archive 的实际下载地址 \ -O jdk-18_linux-x64_bin.tar.gz-c表示断点续传-O指定保存文件名。如果你在镜像站下载不放心的话务必校验哈希sha256sum jdk-18_linux-x64_bin.tar.gz把输出的哈希值和官方页面公布的摘要对比一致再继续。这一步在网速差、下载源不稳定的场景下尤其重要我曾经遇到过解压后java -version报目录不存在排查到最后才发现是下载包不完整。3.2 解压到 /usr/local/javatar 参数逐个说明JDK 18 的压缩包解压后会自动生成一个jdk-18目录。为了统一管理多版本我习惯把所有 JDK 放在/usr/local/java/下sudo mkdir -p /usr/local/java sudo tar -xzf jdk-18_linux-x64_bin.tar.gz -C /usr/local/java ls -l /usr/local/javatar -xzf的四个参数分别是-x解压、-z通过 gzip 解压、-f指定文件名。-C /usr/local/java指定目标目录。解压完成后目录结构类似/usr/local/java/ └── jdk-18/ ├── bin/ │ ├── java │ ├── javac │ └── ... ├── conf/ ├── legal/ └── lib/解压时如果遇到“文件名乱码”常见的原因是压缩包内文件名的编码与系统字符集不一致不过 JDK 官方 tar.gz 基本都是 UTF-8正常不会有问题。更常见的乱码场景是 zip 包的 GBK 中文名和这里的 JDK 安装无关。3.3 配置 JAVA_HOME 与 PATHprofile 怎么写才不踩坑解压只是把文件放好要让系统知道 JDK 18 在哪还需要配置环境变量。我不推荐直接改/etc/profile而是单独建一个/etc/profile.d/jdk18.shsudo tee /etc/profile.d/jdk18.sh EOF export JAVA_HOME/usr/local/java/jdk-18 export PATH${JAVA_HOME}/bin:${PATH} EOF/etc/profile.d/下的.sh文件会在登录 shell 初始化时被自动读取这样配置独立成一个文件卸载时删掉它就行。JAVA_HOME必须指向 JDK 根目录不要带/binPATH把${JAVA_HOME}/bin放在最前面是为了让系统优先使用新版本而不是之前装过的旧 Java。改完后让配置在当前会话立即生效source /etc/profile.d/jdk18.sh如果你是在普通用户下安装、没有 sudo 权限把同样的内容写进~/.bashrc即可。3.4 验证安装java、javac、which 三条命令java -version javac -version which java echo $JAVA_HOME预期输出类似openjdk version 18 2022-03-22 OpenJDK Runtime Environment (build 1836-2087) OpenJDK 64-Bit Server VM (build 1836-2087, mixed mode, sharing) javac 18 /usr/local/java/jdk-18/bin/java /usr/local/java/jdk-18java -version验证运行环境javac -version验证编译器which java确认命令搜索路径优先命中的是哪个目录。三条都对上JDK 18 才算真正装好。4. JDK 18 装完却不生效6 个必查的路径与变量细节4.1 新开终端仍提示 command not found配置完环境变量后很多人直接关掉终端重新打开却还是找不到 java。首先要确认你改的是哪个 shell 的配置文件。bash 会读~/.bashrc和/etc/profilezsh 读~/.zshrc。你写进了/etc/profile.d/但当前是图形终端或非登录 shell就不会自动加载。执行echo $PATH如果输出里没有/usr/local/java/jdk-18/bin说明配置没有生效。先手动source一次能跑就是加载时机问题如果不能跑检查文件内容是否有拼写错误。4.2 JAVA_HOME 写到了 bin 目录JAVA_HOME的值只能是 JDK 根目录。写成/usr/local/java/jdk-18/bin会导致很多框架找不到运行时因为它们的内部逻辑是$JAVA_HOME/bin/java拼路径最终变成/usr/local/java/jdk-18/bin/bin/java自然报错。检测方法ls -l ${JAVA_HOME}/bin/java如果提示No such file or directory优先怀疑路径不对。4.3 root 和普通用户的配置互相覆盖有时候你在 root 下装好 JDK 18切到普通用户又失效了。原因是/etc/profile.d/jdk18.sh只在 root 登录时被 NFS、sudo 会话正确处理普通用户的环境变量可能被~/.bash_profile里旧配置覆盖。检查普通用户的~/.bashrc、~/.profile看有没有历史遗留的 JAVA_HOME 赋值。4.4 sudo 执行时找不到 javasudo java -version报错但普通用户正常。这不是 JDK 装坏了而是出于安全考虑sudo 默认重置PATH为secure_path。执行sudo visudo找到secure_path这一行把/usr/local/java/jdk-18/bin加进去。如果只是临时执行也可以sudo env PATH$PATH java -version4.5 系统里有多个 JDK命令命中旧版本服务器上以前装过 OpenJDK 8 或 JDK 17即使你配好了 JDK 18java -version可能还是旧版本。用下面的命令看看到底有几个 javatype -a javatype -a会列出 PATH 中所有叫 java 的可执行文件。如果旧版本排在前面调整 PATH 顺序或者直接把旧版本所在目录从 PATH 中移除。4.6 解压中断导致目录不完整下载的压缩包不完整或者解压时磁盘空间不够jdk-18目录会缺少关键文件。检查方式test -x /usr/local/java/jdk-18/bin/java echo OK || echo MISSING顺便看一眼磁盘剩余空间df -h /usr/local/java解压不完整的情况重新下载 tar.gz 再解压一次通常比修复文件靠谱得多。表配置失败时最常见的三个原因排查顺序症状排查命令常见原因java 找不到echo $PATHprofile 未生效或未写入java -version 报错ls -l $JAVA_HOME/bin/javaJAVA_HOME 指向错误sudo 下失效sudo env PATH$PATH java -versionsecure_path 拦截5. 让解压版 JDK 18 融入业务IDE、容器与多版本并用5.1 IDE 和构建工具认的是 JAVA_HOME 而不是 PATH很多人在命令行里敲java -version正常但一打开 IDEA 或 Eclipse项目构建就报“Error: java: invalid source release: 18”。原因很常见IDE 启动时会读取系统环境变量但图形会话未必继承你在/etc/profile.d/里的配置。更好用的做法是在启动 IDE 的脚本或桌面入口里显式带上环境变量例如export JAVA_HOME/usr/local/java/jdk-18 export PATH${JAVA_HOME}/bin:${PATH} /opt/idea/bin/idea.shMaven、Gradle 这类构建工具同样优先读取JAVA_HOME而不是 PATH。所以/etc/profile.d/jdk18.sh里必须把JAVA_HOME写对否则mvn -v显示的 Java 版本和java -version永远对不上。5.2 容器镜像里用压缩包安装Dockerfile 示例生产环境跑 Spring Boot 应用Docker 镜像通常基于 slim 或 distroless里面没有包管理器也没有apt-get。这种场景下解压安装反而是最顺的路径。一个最小 DockerfileFROM debian:bookworm-slim COPY jdk-18_linux-x64_bin.tar.gz /tmp/ RUN tar -xzf /tmp/jdk-18_linux-x64_bin.tar.gz -C /opt/ \ rm -f /tmp/jdk-18_linux-x64_bin.tar.gz ENV JAVA_HOME/opt/jdk-18 ENV PATH${JAVA_HOME}/bin:${PATH}这里的COPY把压缩包带进镜像RUN解压后立即删除安装包避免镜像体积膨胀。ENV设置环境变量确保容器启动后的进程能找到 Java。使用这种方式镜像构建过程不依赖外部网络源也不会因为 apt 源波动导致构建失败。5.3 systemd 服务脚本里别指望读 profile用 systemd 管理 Java 服务时Unit 文件运行在一个独立环境不读取/etc/profile.d/。写启动路径时直接写绝对路径或者用Environment指令显式声明[Service] EnvironmentJAVA_HOME/usr/local/java/jdk-18 ExecStart${JAVA_HOME}/bin/java -Xmx512m -jar /srv/app/app.jar${JAVA_HOME}在 systemd 的 ExecStart 里只会展开 systemd 自己的环境变量如果你已经用Environment定义了它就能正常生效。不依赖用户 shell 配置服务重启、开机自启才不会被环境因素影响。6. 一个加分项用软链接和 env 脚本收尾 JDK 18 的可维护性生产服务器上只装一个 JDK 18 的做法不太现实JDK 17、JDK 18、JDK 21 并存才是常态。与其频繁改动/etc/profile.d/jdk18.sh不如把目录层级的开关交给软链接。#!/usr/bin/env bash # 用法: ./jdk_switch.sh 18 切换到 JDK 18 set -euo pipefail BASE/usr/local/java VERSION${1:?请指定版本号例如 18 或 17} if [ ! -d ${BASE}/jdk-${VERSION} ]; then echo 未找到 ${BASE}/jdk-${VERSION} 2 exit 1 fi ln -sfn jdk-${VERSION} ${BASE}/current cat /etc/profile.d/jdk18.sh EOF export JAVA_HOME${BASE}/current export PATH\${JAVA_HOME}/bin:\${PATH} EOF echo 已切换 JDK → ${VERSION} ${BASE}/current/bin/java -version脚本的核心是ln -sfn-s创建符号链接-f覆盖已有链接-n避免把 current 当作目录再往里建子链接。切换时执行./jdk_switch.sh 17current就指向 JDK 17而所有依赖/usr/local/java/current的配置都无需改动。回滚同理一条命令回到旧版本不用重装、不用清缓存。JDK 18 的非 LTS 特性决定了你迟早要面对版本切换把这一步做成脚本比在面试时背“五种安装方式”更有说服力。本文还有配套的精品资源点击获取