安装前的准备工作:选择合适的JDK版本和安装方式
在动手安装之前,先要搞清楚两个问题:装哪个版本,用哪种方式装。Oracle JDK目前常用的长期支持版本有JDK 8、JDK 11和JDK 17,其中JDK 8仍然大量存在于老项目中,而新项目一般推荐JDK 17及以上。需要注意的是,Oracle从JDK 11开始调整了授权协议,生产环境商用需要付费订阅,如果是商业用途,可以考虑OpenJDK作为替代,二者在功能上几乎没有差别。
安装方式上,Linux下主要有三种选择:第一种是直接下载Oracle官网提供的tar.gz压缩包手动解压,这种方式最灵活,可以精确控制安装路径,也是本文重点介绍的方式;第二种是下载rpm包,在CentOS、RHEL等基于Red Hat的发行版上用rpm命令安装;第三种是通过系统的包管理器安装OpenJDK,比如Ubuntu上的apt或者CentOS上的yum,这种方式最省事但拿不到Oracle官方版本。如果你明确需要Oracle JDK,前两种方式更合适。
另外还要确认系统架构,现在的服务器基本都是64位的x86架构,下载安装包时选择Linux x64版本即可。如果你的机器是ARM架构,比如某些国产化服务器,就要选择对应的aarch64版本,装错了架构会直接报无法执行二进制文件的错误。可以用uname -m命令快速确认当前系统架构。
下载安装包需要登录Oracle官网账号,如果服务器网络不好或者不方便登录,可以先把安装包下载到本地,再通过scp工具传到服务器上。下面这条命令演示了如何把本地文件上传到服务器的opt目录:
# 在本地机器执行,把安装包上传到服务器 scp jdk-17.0.9_linux-x64_bin.tar.gz root@192.168.0.1:/opt/ # 登录服务器后确认文件完整 cd /opt ls -lh jdk-17.0.9_linux-x64_bin.tar.gz
传完之后建议用md5sum命令校验一下文件的哈希值,和官网公布的值对比,确保传输过程中文件没有损坏。这一步很多人会忽略,但安装包不完整导致的解压报错排查起来相当浪费时间。

手动解压安装Oracle JDK的完整步骤
推荐把JDK安装在/usr/local/java或者/opt/java目录下,这样路径清晰,便于管理。首先创建目标目录,然后解压安装包。假设安装包已经放在/opt目录下,执行以下命令:
# 创建安装目录 mkdir -p /usr/local/java # 解压到目标目录 tar -zxvf /opt/jdk-17.0.9_linux-x64_bin.tar.gz -C /usr/local/java # 查看解压结果 ls /usr/local/java # 输出:jdk-17.0.9 # 为了方便后续升级维护,建立一个软链接 ln -s /usr/local/java/jdk-17.0.9 /usr/local/java/jdk
这里建软链接是个很实用的技巧。软链接指向/usr/local/java/jdk,实际指向具体的版本目录。将来升级JDK时,只需要重新解压新版本,再把软链接切换过去,环境变量配置完全不用动,回滚也是同理,把软链接指回旧目录就行。对于生产服务器来说,这种做法能大大降低升级风险。
解压完成后,可以先用绝对路径测试一下Java是否能运行,确认安装包本身没问题:
/usr/local/java/jdk/bin/java -version # 正常会输出类似内容 # java version "17.0.9" 2023-10-17 LTS # Java(TM) SE Runtime Environment (build 17.0.9+9-LTS-123)
如果这一步报错说权限不足,检查一下bin/java文件是否有执行权限,必要时执行chmod +x /usr/local/java/jdk/bin/java补上。如果报GLIBC版本相关的错误,说明你的系统C库版本太老,和这个JDK版本不兼容,要么换老一点的JDK版本,要么升级操作系统。
配置环境变量:JAVA_HOME、PATH和CLASSPATH
环境变量配置是整个安装过程中最容易出错的环节。需要设置的核心变量是JAVA_HOME和PATH:JAVA_HOME指向JDK的安装根目录,很多Java应用和构建工具如Tomcat、Maven、Gradle都依赖它来定位JDK;PATH中加入$JAVA_HOME/bin后,才能在任意目录直接使用java和javac命令。至于CLASSPATH,现代JDK基本不需要手动设置,除非你在维护非常老的项目,否则不建议配置,反而容易引起类加载的混乱。
配置文件的选择也有讲究。修改/etc/profile对所有用户生效,适合服务器场景;修改当前用户主目录下的~/.bashrc只对当前用户生效,适合多人共用一台机器时不想影响别人的情况。以全局配置为例,编辑/etc/profile,在文件末尾追加以下内容:
# 编辑配置文件 vim /etc/profile # 在文件末尾追加以下内容 export JAVA_HOME=/usr/local/java/jdk export PATH=$JAVA_HOME/bin:$PATH
保存退出后,配置并不会立即生效,需要执行source /etc/profile让当前shell重新加载配置文件。这是一个高频踩坑点:很多人改完配置直接开新窗口测试,发现java命令还是找不到,就以为配置失败了。其实只要用source命令刷新一下,或者重新登录一次即可。验证是否配置成功,执行以下命令:
# 重新加载配置 source /etc/profile # 验证环境变量 echo $JAVA_HOME # 应输出 /usr/local/java/jdk java -version javac -version # 两个命令都能正常输出版本号即表示配置成功
如果你的服务器使用zsh作为默认shell,比如macOS或者部分定制的Linux环境,zsh默认不读取/etc/profile,需要把配置写到~/.zshrc中。这是另一个常见的坑,明明配置文件里写了变量,终端里却不生效,多半就是shell类型和配置文件不匹配造成的。
多版本JDK管理与常见问题排查
实际工作中经常遇到一台机器需要多个JDK版本的情况,比如一个老项目依赖JDK 8,新项目要用JDK 17。在CentOS和RHEL上,可以用系统自带的update-alternatives工具来管理多版本切换:
# 注册两个JDK版本,最后的数字是优先级 update-alternatives --install /usr/bin/java java /usr/local/java/jdk8/bin/java 800 update-alternatives --install /usr/bin/java java /usr/local/java/jdk17/bin/java 1700 # 交互式切换版本 update-alternatives --config java # 查看当前使用的版本 update-alternatives --display java
Ubuntu系统上对应的工具是update-alternatives的封装版本,用法基本一致。不过在容器化和云原生时代,更推荐的做法是用Docker为不同项目指定不同的JDK镜像,物理机上只保留一个默认版本,这样隔离性更好,也不会互相污染。
安装配置完成后,如果java命令仍然无法使用,可以按以下思路排查:第一步用which java看系统找到的java命令在哪里,如果路径不对说明PATH配置有问题;第二步用echo $PATH检查PATH中是否包含了$JAVA_HOME/bin;第三步确认是否执行过source命令或者重新登录。还有一个隐蔽的问题是配置文件里写了PATH=$PATH:$JAVA_HOME/bin但JAVA_HOME本身拼写错误,导致展开后的路径不存在,这种错误可以通过逐个echo变量的方式定位。
最后提醒一点,/etc/profile是系统级配置,修改前建议先备份一份,例如cp /etc/profile /etc/profile.bak。配置文件写错严重时会导致登录异常,有一份备份就能快速恢复。另外如果是通过SSH密钥登录的服务器,某些非交互式shell同样不会加载profile,部署自动化脚本时最好在脚本内显式source配置文件或者直接使用JDK的绝对路径,避免环境变量缺失导致脚本执行失败。按本文的步骤操作下来,从下载、解压到配置验证的整个流程应该能顺利完成,之后无论是部署Web应用还是运行Java服务,都有一个干净的JDK环境作为基础。
Oracle JDKLinux环境配置JDK安装修改时间:2026-09-06 20:11:41