1. 项目概述为什么JDK 1.8依然是Linux环境下的“定海神针”如果你在Linux服务器上部署过Java应用大概率遇到过这个场景项目文档里明确写着“运行环境JDK 1.8”。即便Java版本已经迭代到JDK 17、21甚至预览版JDK 1.8即Java 8在众多生产环境中尤其是企业级后端服务、大数据组件如Hadoop、Spark的某些版本和传统业务系统中依然占据着不可撼动的地位。这背后有历史兼容性、框架依赖以及稳定性考量的多重原因。因此在Linux系统上干净利落地安装并配置好JDK 1.8是后端开发、运维乃至DevOps工程师的一项基础且关键的技能。这个教程的目标很明确带你从零开始在Linux系统上完成JDK 1.8的安装和环境变量配置并确保你能清晰理解每一个步骤背后的意图而不仅仅是复制粘贴命令。我会基于最常见的CentOS/RHEL系和Ubuntu/Debian系发行版进行讲解涵盖在线安装和离线安装两种主要方式并分享我在多年运维中积累的排查技巧和最佳实践。无论你是刚接触Linux的新手还是需要为多台机器批量部署的老手这篇内容都能提供直接的参考。2. 核心思路与安装方案选型在Linux上安装软件尤其是像JDK这样的核心运行时方法不止一种。选择哪种方式取决于你的网络环境、系统权限、以及对版本管理和维护便利性的要求。2.1 主要安装方式对比目前主流的安装方式可以归纳为以下三种各有其适用场景安装方式核心原理优点缺点适用场景使用系统包管理器通过yum(CentOS/RHEL)或apt(Ubuntu/Debian)从官方软件源安装OpenJDK包。极其简单一条命令即可自动解决依赖便于后续统一升级管理。软件源中的版本可能不是最新的1.8小版本安装的是OpenJDK非Oracle JDK对绝大多数应用无影响。快速搭建测试、开发环境对特定小版本无严格要求的生产环境。手动下载安装包从Oracle官网或OpenJDK镜像站下载.tar.gz压缩包解压到指定目录并手动配置环境变量。版本控制完全自主可安装任意小版本如8u401可安装Oracle JDK便于多版本共存与管理。步骤相对繁琐需要手动处理环境变量升级时需要重复操作。生产环境需指定精确版本需要安装Oracle JDK有离线安装需求。使用SDK管理工具通过SDKMAN!、jenv等工具进行安装和管理。可轻松安装多个JDK版本并随时切换自动化程度高管理方便。需要先安装工具本身在某些严格受限的生产服务器上可能不适用。个人开发机需要频繁切换Java版本的场景。对于大多数生产环境和希望获得确定性的场景手动下载安装包的方式是首选。它能让你精确控制JDK的版本和安装路径避免因系统自动更新带来的意外变更也更容易实现自动化脚本部署。因此本教程将以此方法作为重点进行详细拆解。2.2 版本选择OpenJDK vs. Oracle JDK这是一个经典问题。简单来说OpenJDK Java平台的开源参考实现。自从JDK 11之后Oracle JDK也是基于OpenJDK构建的两者功能几乎完全一致。对于JDK 1.8OpenJDK版本由社区维护更新。Oracle JDK 过去由Oracle公司提供包含了某些商业特性如Java Flight Recorder。对于JDK 1.8的旧版本Oracle后期转向了需要商业许可的更新模式。核心建议 对于绝大多数应用开发和生产部署直接选择OpenJDK。它完全免费功能满足需求且由Red Hat、Amazon、Azul等大厂提供长期支持LTS的构建版本更安全可靠。例如你可以直接使用AdoptOpenJDK现为Eclipse Adoptium项目或Amazon Corretto的构建。3. 实操准备下载与系统检查在开始安装前做好准备工作能让整个过程更顺畅。3.1 获取正确的安装包首先我们需要下载JDK 1.8的Linux压缩包。这里以从Adoptium原AdoptOpenJDK下载为例因为它提供了清晰的归档页面。确定系统架构 连接到你的Linux服务器打开终端输入以下命令查看系统是64位x86_64还是32位i386/i686。现代服务器几乎都是64位。uname -m如果输出是x86_64或amd64则表示是64位系统。选择下载方式有图形界面浏览器 可以直接访问 Adoptium Temurin 8 归档页面 在“Assets”列表中找到类似OpenJDK8U-jdk_x64_linux_hotspot_8u412b08.tar.gz的文件。版本号8u412b08可能会更新选择最新的jdk非jre包即可。纯命令行环境推荐使用wget/curl 我们可以直接在终端里下载。以下命令下载一个特定版本请根据最新发布替换版本号# 使用 wget 下载 wget https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u412-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u412b08.tar.gz # 如果 wget 未安装可以使用 curl # curl -L -O https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u412-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u412b08.tar.gz注意 由于网络原因直接从GitHub下载可能较慢。你可以先将安装包下载到本地再通过SFTP工具如FileZilla、WinSCP上传到服务器或者寻找国内的镜像源。3.2 规划安装目录在Linux中将第三方软件安装到/opt或/usr/local目录下是一种良好的习惯。这些目录专为“附加软件包”设计。我个人的习惯是/opt 用于存放自解压或独立发行的软件包每个软件在/opt下有自己独立的子目录比如/opt/jdk1.8.0_412。/usr/local 传统上用于本地编译安装的软件。这里我们选择/opt目录。执行以下命令创建目录如果已有可忽略sudo mkdir -p /opt-p参数确保如果父目录不存在则一并创建。4. 核心安装与环境变量配置详解这是整个教程最核心的部分每一步都有其用意。4.1 解压安装包到目标目录假设你已经将下载的tar.gz文件放在了当前用户的~/downloads目录或直接通过wget下载到了当前目录。使用tar命令解压。-z表示解压gzip-x表示解包-v显示过程可选-f指定文件。sudo tar -zxvf OpenJDK8U-jdk_x64_linux_hotspot_8u412b08.tar.gz -C /opt-C /opt参数指定了解压目标目录为/opt。解压完成后进入/opt目录查看你会看到一个以jdk8u412-b08或类似命名的文件夹。为了方便管理和环境变量配置我们可以为其创建一个通用的软链接。cd /opt sudo ln -s jdk8u412-b08 jdk1.8这样/opt/jdk1.8就指向了实际的JDK目录。未来升级JDK时只需解压新版本到/opt然后重新指向这个软链接即可无需改动环境变量。4.2 配置全局环境变量环境变量的作用是让系统在任何位置都能找到java、javac等命令。我们需要修改/etc/profile文件对所有用户生效或用户家目录下的.bashrc仅对当前用户生效。生产环境建议配置全局。使用vim或nano编辑器打开全局配置文件sudo vim /etc/profile在文件的末尾添加以下内容# 设置 JAVA_HOME指向我们创建的软链接 export JAVA_HOME/opt/jdk1.8 # 将 JDK 的 bin 目录添加到 PATH 环境变量最前面 export PATH$JAVA_HOME/bin:$PATHJAVA_HOME 许多Java应用如Tomcat、Maven、Gradle会读取这个变量来定位Java安装位置。PATH$JAVA_HOME/bin:$PATH 将$JAVA_HOME/bin添加到PATH变量的最前面。这样当你在终端输入java时系统会优先使用我们安装的版本而不是系统可能自带的旧版本。重要技巧 使用$JAVA_HOME/bin:$PATH而不是$PATH:$JAVA_HOME/bin。前者确保优先使用自定义JDK后者则可能让系统自带的Java先被找到。保存并退出编辑器在vim中按Esc后输入:wq回车。使配置立即生效 执行source命令让当前终端会话重新加载配置文件。source /etc/profile4.3 验证安装是否成功现在让我们进行一系列验证确保安装和配置都正确无误。检查Java版本java -version如果配置成功你会看到类似如下输出其中包含“OpenJDK”、“1.8.0_412”等关键信息openjdk version 1.8.0_412 OpenJDK Runtime Environment (Temurin)(build 1.8.0_412-b08) OpenJDK 64-Bit Server VM (Temurin)(build 25.412-b08, mixed mode)检查编译器版本javac -version应输出javac 1.8.0_412。检查环境变量echo $JAVA_HOME应输出/opt/jdk1.8。which java应输出/opt/jdk1.8/bin/java。这个命令显示了当你输入java时系统实际调用的可执行文件路径是验证PATH是否设置正确的终极方法。5. 备选方案使用系统包管理器快速安装对于追求效率的测试环境或初学者使用系统自带的包管理器是最快的方式。这里给出CentOS和Ubuntu的命令。5.1 在CentOS/RHEL 7/8/9上安装首先更新yum缓存sudo yum update搜索可用的OpenJDK 1.8包sudo yum search openjdk你会看到类似java-1.8.0-openjdk和java-1.8.0-openjdk-devel的包。前者是JRE运行时环境后者是JDK开发工具包包含javac。我们需要安装后者。安装OpenJDK 1.8 JDKsudo yum install -y java-1.8.0-openjdk-devel安装完成后同样可以用java -version和javac -version验证。系统会自动配置好环境变量JAVA_HOME通常位于/usr/lib/jvm/java-1.8.0-openjdk-。5.2 在Ubuntu/Debian上安装更新apt软件包列表sudo apt update安装OpenJDK 1.8 JDKsudo apt install -y openjdk-8-jdk验证安装。在Ubuntu上你可以使用update-alternatives来管理多个Java版本但默认安装后即可使用。包管理器安装的注意事项 这种方式安装的JDK其文件分散在系统的各个标准目录如/usr/bin,/usr/lib/jvm而不是集中在一个目录下。虽然管理方便但如果你想精确控制版本或需要与某些明确要求JAVA_HOME指向特定目录的软件配合手动安装方式更清晰。6. 多版本JDK共存与管理在实际工作中服务器上可能需要同时存在JDK 1.8和更高版本如JDK 11或17。手动安装的方式可以轻松实现这一点。分别安装 将不同版本的JDK解压到/opt目录下的不同文件夹例如/opt/jdk1.8、/opt/jdk-11.0.20、/opt/jdk-17.0.9。不设置全局JAVA_HOME 在/etc/profile中我们不设置固定的JAVA_HOME和修改全局PATH。使用替代方案切换方法A 使用update-alternativesDebian/Ubuntu系自带CentOS可安装 这是一个强大的系统工具可以为同一个命令如java注册多个候选版本并允许你交互式地选择默认使用哪个。# 注册JDK 1.8 sudo update-alternatives --install /usr/bin/java java /opt/jdk1.8/bin/java 1000 sudo update-alternatives --install /usr/bin/javac javac /opt/jdk1.8/bin/javac 1000 # 注册JDK 11 sudo update-alternatives --install /usr/bin/java java /opt/jdk-11.0.20/bin/java 1100 sudo update-alternatives --install /usr/bin/javac javac /opt/jdk-11.0.20/bin/javac 1100 # 选择默认版本 sudo update-alternatives --config java sudo update-alternatives --config javac方法B Shell别名或脚本 在用户自己的~/.bashrc中定义别名快速切换环境。alias java8export JAVA_HOME/opt/jdk1.8; export PATH$JAVA_HOME/bin:$PATH alias java11export JAVA_HOME/opt/jdk-11.0.20; export PATH$JAVA_HOME/bin:$PATH需要哪个版本就在终端输入java8或java11即可切换当前会话的环境。方法C 在应用启动脚本中指定 这是生产环境最推荐的方式。在启动Tomcat、Spring Boot Jar包时直接在脚本里设定JAVA_HOME。# 在 catalina.sh 或独立的启动脚本中 export JAVA_HOME/opt/jdk1.8 export PATH$JAVA_HOME/bin:$PATH # 然后再启动应用这样应用完全不受系统全局环境的影响隔离性最好。7. 常见问题与深度排查实录即使按照步骤操作你也可能会遇到一些问题。这里记录了几个我踩过的坑和解决方案。7.1 问题一java -version显示的还是旧版本这是最常见的问题通常是因为PATH环境变量顺序不对或配置未生效。排查步骤echo $PATH 查看输出确认/opt/jdk1.8/bin是否在路径中并且是否在系统默认路径如/usr/bin之前。which java 确认这个命令指向的是/opt/jdk1.8/bin/java还是/usr/bin/java。如果是后者说明系统自带的Java优先级更高。source /etc/profile 确保执行了此命令或者关闭终端重新打开一个新的。解决方案检查/etc/profile中PATH的设置确保是$JAVA_HOME/bin:$PATH。如果系统预装了其他Java可以考虑卸载它们yum remove java-1.7.0-openjdk或apt remove openjdk-11-jre-headless但生产环境需谨慎确保不影响其他依赖。最根本的方法使用update-alternatives管理或者像前面提到的在应用启动脚本中直接指定。7.2 问题二JAVA_HOME配置正确但某些应用如Tomcat仍报错有些应用或脚本不会直接读取JAVA_HOME环境变量而是有自己查找Java的机制。排查步骤检查应用的启动脚本如catalina.sh看其内部是否硬编码了Java路径或有自己的查找逻辑。在应用启动脚本的开头显式地设置JAVA_HOME和PATH如上文方法C所示。对于通过systemd服务启动的应用需要在服务单元文件.service文件的[Service]部分设置环境变量[Service] EnvironmentJAVA_HOME/opt/jdk1.8 EnvironmentPATH$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin7.3 问题三安装后中文显示乱码或时区不对JDK本身包含区域设置数据。如果服务器系统语言环境是英文而应用需要处理中文可能会出问题。解决方案安装字体针对图形或PDF生成等场景# CentOS sudo yum install -y fontconfig dejavu-sans-fonts # Ubuntu sudo apt install -y fontconfig fonts-dejavu-core设置服务器系统语言环境# 查看当前locale locale # 安装中文语言包如果需要 sudo yum install -y glibc-common langpacks-zh_CN # CentOS sudo apt install -y language-pack-zh-hans # Ubuntu # 设置环境变量可放入 ~/.bashrc 或 /etc/profile export LANGzh_CN.UTF-8 export LC_ALLzh_CN.UTF-8在Java应用启动参数中指定时区和编码java -Dfile.encodingUTF-8 -Duser.timezoneAsia/Shanghai -jar your-app.jar7.4 问题四离线环境如何安装在没有外网的生产环境中你需要提前准备好所有依赖。下载离线包 在一台有网络的同架构机器上下载好JDK的tar.gz包。如果需要通过包管理器安装则需要下载对应的RPM或DEB包及其所有依赖。对于yum可以使用yumdownloader需安装yum-utils工具下载RPM包及依赖yum install -y yum-utils yumdownloader --resolve --destdir/path/to/save java-1.8.0-openjdk-devel传输到目标机器 使用U盘、内网SFTP或任何可用的介质将安装包传输到目标服务器。手动安装对于tar.gz包解压配置即可无依赖问题。对于RPM包使用rpm命令手动安装但需按依赖顺序安装非常繁琐。更推荐使用yum localinstall它能自动处理本地RPM包的依赖如果依赖包也在本地目录sudo yum localinstall /path/to/*.rpm对于DEB包使用dpkgsudo dpkg -i /path/to/*.deb # 如果报依赖错误可以尝试 sudo apt-get install -f8. 安全与维护建议安装完成并非终点保持JDK的安全和稳定运行同样重要。定期更新 JDK 1.8虽然稳定但仍有安全更新。关注Adoptium、Amazon Corretto等提供LTS支持的发行版公告定期评估并升级到新的小版本如从8u402升级到8u412。升级时按照“下载新包 - 解压到新目录 - 更新软链接 - 重启应用”的流程进行可以实现无缝切换。权限控制JAVA_HOME目录如/opt/jdk1.8的权限应设置为root所有普通用户只需有读取和执行权限即可防止被篡改。sudo chown -R root:root /opt/jdk1.8 sudo chmod -R 755 /opt/jdk1.8日志与监控 对于生产环境的Java应用确保JDK的垃圾回收日志、应用日志被妥善配置和监控。例如在启动参数中加入-Xloggc:/path/to/gc.log来记录GC日志便于性能分析和故障排查。性能调优 JDK 1.8的默认JVM参数可能不适合所有生产负载。根据应用特点内存消耗、CPU计算型还是IO密集型需要调整堆内存-Xms,-Xmx、垃圾收集器如-XX:UseG1GC等参数。这是一个深水区需要结合监控数据反复调整测试。安装JDK 1.8本身是一个简单的过程但围绕它的版本选择、环境管理、多版本共存和后期维护却体现了系统管理的基本功。我个人的习惯是在任何新服务器上只要可能都优先采用手动解压配置的方式安装JDK并将JAVA_HOME通过软链接管理。这样带来的确定性和灵活性在后续应对各种复杂部署场景时会让你感到得心应手。最后一个小技巧把你完整的安装和配置步骤写成一个Shell脚本下次在新机器上部署时一条命令就能搞定所有事情这才是工程师效率的体现。