Linux JDK 安装与配置指南:多版本部署方案
本文详细介绍在 Linux 系统中安装和配置 JDK 的多种方法,涵盖 APT/YUM 包管理器安装及手动部署方案。内容包括 OpenJDK 与 Oracle JDK 的选择建议、环境变量配置、多版本管理与切换、JVM 性能优化参数设置以及常见故障排查技巧,旨在帮助开发者和运维人员快速搭建稳定可靠的 Java 运行环境。

本文详细介绍在 Linux 系统中安装和配置 JDK 的多种方法,涵盖 APT/YUM 包管理器安装及手动部署方案。内容包括 OpenJDK 与 Oracle JDK 的选择建议、环境变量配置、多版本管理与切换、JVM 性能优化参数设置以及常见故障排查技巧,旨在帮助开发者和运维人员快速搭建稳定可靠的 Java 运行环境。

Java 作为企业级应用的主流开发语言,在 Linux 环境中安装配置 JDK(Java Development Kit)是每个后端开发者、运维工程师的必备技能。本文将详细对比 OpenJDK 与 Oracle JDK,提供 APT/YUM 包管理、手动安装、多版本管理三种主流安装方案,涵盖环境变量配置、版本切换、性能调优等实战技巧,助你快速搭建稳定的 Java 运行环境。
| 版本 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| OpenJDK 11 | 开源免费 | LTS 长期支持,企业主流 | 生产环境首选 |
| OpenJDK 17 | 开源免费 | 最新 LTS 版本,性能优化 | 新项目开发 |
| OpenJDK 8 | 开源免费 | 经典稳定,生态成熟 | 旧系统维护 |
| Oracle JDK | 商业授权 | 官方版本,功能完整 | 商业项目 |
# 查看系统信息
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
# 更新包列表
sudo apt update
# 安装 OpenJDK 11
sudo apt install openjdk-11-jdk -y
# 安装完整版(包含源码和文档)
sudo apt install openjdk-11-jdk openjdk-11-source -y
# 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
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
# 添加 Oracle JDK 仓库
sudo add-apt-repository ppa:linuxuprising/java -y
sudo apt update
# 安装 Oracle JDK 17
sudo apt install oracle-java17-installer -y
# 安装时会提示接受许可协议
# 查看可用的 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
# 启用 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
# 下载 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
# 创建安装目录
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
# 解压下载的压缩包
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
# 方法 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
# 配置 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
# 查看 update-alternatives 配置
sudo update-alternatives --display java
# 查看所有 Java 安装
ls -la /usr/lib/jvm/
# 查看当前使用的 Java 版本
java -version
which java
# 交互式切换
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
# 临时使用 JDK 11
export JAVA_HOME=/usr/lib/jvm/jdk-11
export PATH=$JAVA_HOME/bin:$PATH
# 验证
java -version
# 检测 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
# ~/.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"
# 重新加载配置
source ~/.bashrc
# 或
source /etc/profile
# 验证配置
echo $JAVA_HOME
echo $PATH | grep java
# 验证 Java 安装
java -version
# 期望输出包含:openjdk version "17.0.8" 2023-07-18
# 验证编译器
javac -version
# 验证完整安装
which java
which javac
which jar
# 创建测试文件
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
# 查看详细系统属性
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
# 生产环境推荐配置(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"
# 避免中文乱码
export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"
# 或
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
# 设置 JVM 时区为上海
export JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Shanghai"
# 错误 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-*/
# 查看所有环境变量
env | grep -i java
# 查看命令解析路径
type java
which -a java # 显示所有 java 命令位置
# 检查符号链接
ls -la /usr/bin/java
ls -la /etc/alternatives/java
# 清除错误配置
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
java -version 正确显示版本javac -version 编译器正常echo $JAVA_HOME 路径正确$JAVA_HOME/bin#!/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
# 查看 Java 进程
jps -l # 查看所有 Java 进程
# 监控 JVM 状态
jstat -gc 1000 # 每秒监控 GC 情况
# 堆转储分析(调试内存泄漏)
jmap -dump:live,format=b,file=heap.bin
# 线程分析
jstack > thread_dump.txt

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online