前言
Java 作为企业级应用的主流开发语言,在 Linux 环境中安装配置 JDK(Java Development Kit)是每个后端开发者、运维工程师的必备技能。本文将详细对比 OpenJDK 与 Oracle JDK,提供 APT/YUM 包管理、手动安装、多版本管理三种主流安装方案,涵盖环境变量配置、版本切换、性能调优等实战技巧,助你快速搭建稳定的 Java 运行环境。
一、安装前准备:选择合适的 JDK
1. 版本选择建议
| 版本 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| OpenJDK 11 | 开源免费 | LTS 长期支持,企业主流 | 生产环境首选 |
| OpenJDK 17 | 开源免费 | 最新 LTS 版本,性能优化 | 新项目开发 |
| OpenJDK 8 | 开源免费 | 经典稳定,生态成熟 | 旧系统维护 |
| Oracle JDK | 商业授权 | 官方版本,功能完整 | 商业项目 |
2. 系统环境检查
# 查看系统信息
cat /etc/os-release
uname -m # x86_64(64 位)或 i686(32 位)
# 检查现有 Java 版本
java -version 2>/dev/null || echo "未安装 Java"
which java # 查看安装位置
# 清理旧版本(如需)
sudo apt remove --purge openjdk-* # Ubuntu
sudo yum remove java-* # CentOS
二、方法一:APT 包管理器安装(Ubuntu/Debian)
1. 安装 OpenJDK 11(推荐生产环境)
# 更新包列表
sudo apt update
# 安装 OpenJDK 11
sudo apt install openjdk-11-jdk -y
# 安装完整版(包含源码和文档)
sudo apt install openjdk-11-jdk openjdk-11-source -y
2. 安装 OpenJDK 17(最新 LTS)
# Ubuntu 22.04+默认包含 JDK 17
sudo apt install openjdk-17-jdk -y
# 早期版本需添加仓库
sudo add-apt-repository ppa:openjdk-r/ppa -y
sudo apt update
sudo apt install openjdk-17-jdk -y
3. 安装 OpenJDK 8(兼容旧项目)
sudo apt install openjdk-8-jdk -y
# 如果找不到包,先更新仓库
sudo add-apt-repository ppa:openjdk-r/ppa -y
sudo apt update
sudo apt install openjdk-8-jdk -y
4. 安装 Oracle JDK(需官网同意协议)
# 添加 Oracle JDK 仓库
sudo add-apt-repository ppa:linuxuprising/java -y
sudo apt update
# 安装 Oracle JDK 17
sudo apt install oracle-java17-installer -y
# 安装时会提示接受许可协议
三、方法二:YUM/DNF 包管理器安装(CentOS/RHEL)
1. CentOS 8/RHEL 8 安装 OpenJDK
# 查看可用的 JDK 版本
dnf search openjdk
# 安装 OpenJDK 11
sudo dnf install java-11-openjdk java-11-openjdk-devel -y
# 安装 OpenJDK 17
sudo dnf install java-17-openjdk java-17-openjdk-devel -y
# 安装 OpenJDK 8
sudo dnf install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y
2. CentOS 7 安装 OpenJDK
# 启用 EPEL 仓库(可选)
sudo yum install epel-release -y
# 安装 OpenJDK 11
sudo yum install java-11-openjdk java-11-openjdk-devel -y
# 或安装 OpenJDK 8
sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y
3. 安装 Oracle JDK(CentOS)
# 下载 Oracle JDK RPM 包
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
# 安装 RPM 包
sudo rpm -ivh jdk-17_linux-x64_bin.rpm
# 或使用 yum 安装本地 RPM(自动处理依赖)
sudo yum localinstall jdk-17_linux-x64_bin.rpm
四、方法三:手动安装(任意 Linux 发行版)
1. 下载 JDK 安装包
# 创建安装目录
sudo mkdir -p /usr/lib/jvm
cd /usr/lib/jvm
# 下载 OpenJDK(以 17 为例)
# 从 Adoptium 下载(原 AdoptOpenJDK)
wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.8_7.tar.gz
# 或从 Oracle 官网下载(需登录)
# wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
2. 解压与安装
# 解压下载的压缩包
sudo tar -xzf OpenJDK17U-jdk_x64_linux_hotspot_17.0.8_7.tar.gz
# 重命名目录(可选)
sudo mv jdk-17.0.8+7 jdk-17
# 设置目录权限
sudo chown -R root:root /usr/lib/jvm/jdk-17
3. 配置环境变量
# 方法 A:修改/etc/profile(系统全局)
sudo nano /etc/profile
# 在文件末尾添加:
export JAVA_HOME=/usr/lib/jvm/jdk-17
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/jre:$JAVA_HOME/lib
export PATH=$JRE_HOME/lib:$PATH
export PATH=$JAVA_HOME/bin:$PATH
# 使配置生效
source /etc/profile
# 方法 B:修改用户级配置(/.bashrc 或/.zshrc)
echo 'export JAVA_HOME=/usr/lib/jvm/jdk-17' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
4. 配置替代系统(update-alternatives)
# 配置 java 命令
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17/bin/java 1
sudo update-alternatives --config java # 选择版本
# 配置 javac 编译器
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-17/bin/javac 1
sudo update-alternatives --config javac
# 配置 jar 打包工具
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk-17/bin/jar 1
五、多版本 JDK 管理与切换
1. 查看已安装的 JDK 版本
# 查看 update-alternatives 配置
sudo update-alternatives --display java
# 查看所有 Java 安装
ls -la /usr/lib/jvm/
# 查看当前使用的 Java 版本
java -version
which java
2. 切换默认 JDK 版本
# 交互式切换
sudo update-alternatives --config java
# 输出示例:
# 有 3 个候选项可用于替换 java (提供 /usr/bin/java)。
#
# 选择 优先级 状态
# --------------------------------------------------
# * 0 /usr/lib/jvm/jdk-17/bin/java 1 自动模式
# 1 /usr/lib/jvm/jdk-11/bin/java 2 手动模式
# 2 /usr/lib/jvm/jdk-8/bin/java 3 手动模式
#
# 要维持当前值 [*] 请按<回车键>,或者键入选择的编号:2
3. 临时切换版本(仅当前会话)
# 临时使用 JDK 11
export JAVA_HOME=/usr/lib/jvm/jdk-11
export PATH=$JAVA_HOME/bin:$PATH
# 验证
java -version
六、环境变量配置详解
1. JAVA_HOME 标准配置
# 检测 JAVA_HOME 是否设置
echo $JAVA_HOME
# 如果没有 JAVA_HOME,自动查找设置
if [ -z "$JAVA_HOME" ]; then
# 查找 java 命令位置
JAVA_PATH=$(which java)
if [ -n "$JAVA_PATH" ]; then
# 解析 JAVA_HOME
export JAVA_HOME=$(dirname $(dirname $(readlink -f $JAVA_PATH)))
fi
fi
2. 完整环境变量配置示例
# ~/.bashrc 或/etc/profile 中添加:
# Java 环境配置
export JAVA_8_HOME=/usr/lib/jvm/jdk-8
export JAVA_11_HOME=/usr/lib/jvm/jdk-11
export JAVA_17_HOME=/usr/lib/jvm/jdk-17
# 设置默认 JDK
export JAVA_HOME=$JAVA_11_HOME
# 添加 PATH
export PATH=$JAVA_HOME/bin:$PATH
# 类路径配置
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# JVM 参数(可选)
export JAVA_OPTS="-Xms512m -Xmx2g -XX:+UseG1GC -Dfile.encoding=UTF-8"
3. 配置生效检查
# 重新加载配置
source ~/.bashrc
# 或
source /etc/profile
# 验证配置
echo $JAVA_HOME
echo $PATH | grep java
七、验证安装与测试
1. 基础验证命令
# 验证 Java 安装
java -version
# 期望输出包含:openjdk version "17.0.8" 2023-07-18
# 验证编译器
javac -version
# 验证完整安装
which java
which javac
which jar
2. 编写测试程序
# 创建测试文件
cat > HelloWorld.java << 'EOF'
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Java 安装成功!");
System.out.println("Java 版本:" + System.getProperty("java.version"));
System.out.println("JAVA_HOME:" + System.getProperty("java.home"));
}
}
EOF
# 编译运行
javac HelloWorld.java
java HelloWorld
3. 高级验证
# 查看详细系统属性
java -XshowSettings:properties -version 2>&1 | grep -A 10 "java.home"
# 检查 JVM 内存
java -XX:+PrintFlagsFinal -version 2>&1 | grep -i heapsize
# 验证 JAVA_HOME 是否正确
$JAVA_HOME/bin/java -version
八、性能优化配置
1. JVM 内存参数调整
# 生产环境推荐配置(8GB 内存服务器)
export JAVA_OPTS="-Xms4g -Xmx6g -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2"
# 开发环境配置
export JAVA_OPTS="-Xms512m -Xmx2g -XX:+UseParallelGC"
# Tomcat 配置示例(catalina.sh 中添加)
JAVA_OPTS="$JAVA_OPTS -server -Xmx2048m -Xms1024m -XX:MaxPermSize=256m"
2. 设置默认字符集
# 避免中文乱码
export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"
# 或
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
3. 时区配置
# 设置 JVM 时区为上海
export JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Shanghai"
九、故障排除指南
1. 常见错误解决
# 错误 1:command not found: java
# 解决:检查 PATH 配置,确保$JAVA_HOME/bin 在 PATH 中
# 错误 2:java.lang.UnsupportedClassVersionError
# 解决:JDK 版本不兼容,使用正确的 JDK 版本编译和运行
# 错误 3:bash: /usr/bin/java: No such file or directory
# 解决:update-alternatives 配置错误,重新配置
# 错误 4:权限不足
# 解决:使用 sudo 或检查文件权限
sudo chmod -R 755 /usr/lib/jvm/jdk-*/
2. 环境变量调试
# 查看所有环境变量
env | grep -i java
# 查看命令解析路径
type java
which -a java # 显示所有 java 命令位置
# 检查符号链接
ls -la /usr/bin/java
ls -la /etc/alternatives/java
3. 多版本冲突解决
# 清除错误配置
sudo update-alternatives --remove-all java
sudo update-alternatives --remove-all javac
# 重新配置
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-11/bin/java 1
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-11/bin/javac 1
十、生产环境最佳实践
1. 安装验证清单
- 基础检查:
java -version正确显示版本javac -version编译器正常echo $JAVA_HOME路径正确
- 环境配置:
- PATH 包含
$JAVA_HOME/bin - JAVA_HOME 指向正确 JDK 目录
- update-alternatives 配置正确
- PATH 包含
- 权限与安全:
- JDK 目录权限为 755
- 使用专用用户运行 Java 应用
- 定期更新安全补丁
2. 自动化安装脚本示例
#!/bin/bash
# auto_install_jdk.sh - JDK 自动安装脚本
JDK_VERSION="11"
INSTALL_DIR="/opt/jdk"
echo "开始安装 OpenJDK ${JDK_VERSION}…"
# 根据系统选择安装方式
if [ -f /etc/debian_version ]; then
# Ubuntu/Debian
sudo apt update
sudo apt install openjdk-${JDK_VERSION}-jdk -y
elif [ -f /etc/redhat-release ]; then
# CentOS/RHEL
sudo yum install java-${JDK_VERSION}-openjdk-devel -y
else
echo "不支持的系统,请手动安装"
exit 1
fi
# 配置环境变量
echo "export JAVA_HOME=/usr/lib/jvm/java-${JDK_VERSION}-openjdk-amd64" >> ~/.bashrc
echo "export PATH=$JAVA_HOME/bin:$PATH" >> ~/.bashrc
source ~/.bashrc
echo "安装完成!"
java -version
3. 监控与维护
# 查看 Java 进程
jps -l # 查看所有 Java 进程
# 监控 JVM 状态
jstat -gc 1000 # 每秒监控 GC 情况
# 堆转储分析(调试内存泄漏)
jmap -dump:live,format=b,file=heap.bin
# 线程分析
jstack > thread_dump.txt
安装方法选择建议
- 快速选择指南:
- 新手/开发环境 → 包管理器安装(apt install openjdk-11-jdk)
- 生产环境 → 手动安装 + 环境变量配置
- 多项目开发 → 多版本管理(SDKMAN 或手动配置)
- 容器环境 → 使用官方 Docker 镜像(docker pull openjdk:11-jdk)
版本选择建议
- 企业生产:OpenJDK 11 LTS(稳定优先)
- 新项目开发:OpenJDK 17 LTS(功能最新)
- 旧系统维护:OpenJDK 8(兼容性优先)
- 商业项目:Oracle JDK(官方支持)
性能优化提示
- 根据应用类型调整 JVM 内存参数
- 启用合适的垃圾收集器(G1GC 推荐)
- 设置正确的字符集和时区
- 定期更新 JDK 安全补丁
最后提醒
- 生产环境务必使用 LTS 版本
- 配置完成后验证 java -version
- 定期备份环境变量配置
- 使用工具监控 JVM 运行状态

