前言
Java作为企业级应用的主流开发语言,在Linux环境中安装配置JDK(Java Development Kit)是每个后端开发者、运维工程师的必备技能。本文将详细对比OpenJDK与Oracle JDK,提供APT/YUM包管理、手动安装、多版本管理三种主流安装方案,涵盖环境变量配置、版本切换、性能调优等实战技巧,助你快速搭建稳定的Java运行环境。
一、安装前准备:选择合适的JDK
JDK版本选择建议
版本 类型 特点 适用场景
OpenJDK 11 开源免费 LTS长期支持,企业主流 生产环境首选
OpenJDK 17 开源免费 最新LTS版本,性能优化 新项目开发
OpenJDK 8 开源免费 经典稳定,生态成熟 旧系统维护
Oracle JDK 商业授权 官方版本,功能完整 商业项目
系统环境检查
bash
1. 查看系统信息
cat /etc/os-release
uname -m # x86_64(64位)或i686(32位)
2. 检查现有Java版本
java -version 2>/dev/null || echo “未安装Java”
which java # 查看安装位置
3. 清理旧版本(如需)
sudo apt remove --purge openjdk-* # Ubuntu
sudo yum remove java-* # CentOS
二、方法一:APT包管理器安装(Ubuntu/Debian)
- 安装OpenJDK 11(推荐生产环境)
bash
更新包列表
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)
bash
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(兼容旧项目)
bash
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(需官网同意协议)
bash
添加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)
- CentOS 8/RHEL 8安装OpenJDK
bash
查看可用的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
bash
启用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)
bash
下载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发行版)
- 下载JDK安装包
bash
创建安装目录
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
- 解压与安装
bash
解压下载的压缩包
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. 配置环境变量
bash
方法A:修改/etc/profile(系统全局)
sudo nano /etc/profile
在文件末尾添加:
export JAVA_HOME=/usr/lib/jvm/jdk-17
export JRE_HOME=JAVAHOME/jreexportCLASSPATH=.:JAVA_HOME/jre export CLASSPATH=.:JAVAHOME/jreexportCLASSPATH=.:JAVA_HOME/lib:JREHOME/libexportPATH=JRE_HOME/lib export PATH=JREHOME/libexportPATH=JAVA_HOME/bin:$PATH
使配置生效
source /etc/profile
bash
方法B:修改用户级配置(/.bashrc或/.zshrc)
echo ‘export JAVA_HOME=/usr/lib/jvm/jdk-17’ >> ~/.bashrc
echo ‘export PATH=JAVAHOME/bin:JAVA_HOME/bin:JAVAHOME/bin:PATH’ >> ~/.bashrc
source ~/.bashrc
4. 配置替代系统(update-alternatives)
bash
配置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管理与切换
- 查看已安装的JDK版本
bash
查看update-alternatives配置
sudo update-alternatives --display java
查看所有Java安装
ls -la /usr/lib/jvm/
查看当前使用的Java版本
java -version
which java
2. 切换默认JDK版本
bash
交互式切换
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 手动模式
3 /usr/lib/jvm/jdk-17/bin/java 1 手动模式
要维持当前值[*]请按<回车键>,或者键入选择的编号:2
- 临时切换版本(仅当前会话)
bash
临时使用JDK 11
export JAVA_HOME=/usr/lib/jvm/jdk-11
export PATH=JAVAHOME/bin:JAVA_HOME/bin:JAVAHOME/bin:PATH
验证
java -version
六、环境变量配置详解
- JAVA_HOME标准配置
bash
检测JAVA_HOME是否设置
echo $JAVA_HOME
如果没有JAVA_HOME,自动查找设置
if [ -z "KaTeX parse error: Expected 'EOF', got '#' at position 24: …E" ]; then #̲ 查找java命令位置 …(which java)
if [ -n "KaTeX parse error: Expected 'EOF', got '#' at position 28: …; then #̲ 解析JAVA_HOME …(dirname $(dirname $(readlink -f $JAVA_PATH)))
export JAVA_HOME
fi
fi
2. 完整环境变量配置示例
bash
~/.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=JAVAHOME/bin:JAVA_HOME/bin:JAVAHOME/bin:PATH
类路径配置
export CLASSPATH=.:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/dt.jar:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
JVM参数(可选)
export JAVA_OPTS=“-Xms512m -Xmx2g -XX:+UseG1GC -Dfile.encoding=UTF-8”
3. 配置生效检查
bash
重新加载配置
source ~/.bashrc
或
source /etc/profile
验证配置
echo $JAVA_HOME
echo $PATH | grep java
七、验证安装与测试
- 基础验证命令
bash
验证Java安装
java -version
期望输出包含:openjdk version “17.0.8” 2023-07-18
验证编译器
javac -version
验证完整安装
which java
which javac
which jar
2. 编写测试程序
bash
创建测试文件
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. 高级验证
bash
查看详细系统属性
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
八、性能优化配置
- JVM内存参数调整
bash
生产环境推荐配置(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. 设置默认字符集
bash
避免中文乱码
export JAVA_TOOL_OPTIONS=“-Dfile.encoding=UTF-8”
或
export JAVA_OPTS=“$JAVA_OPTS -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8”
3. 时区配置
bash
设置JVM时区为上海
export JAVA_OPTS=“$JAVA_OPTS -Duser.timezone=Asia/Shanghai”
九、故障排除指南
- 常见错误解决
bash
错误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. 环境变量调试
bash
查看所有环境变量
env | grep -i java
查看命令解析路径
type java
which -a java # 显示所有java命令位置
检查符号链接
ls -la /usr/bin/java
ls -la /etc/alternatives/java
3. 多版本冲突解决
bash
清除错误配置
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 路径正确
✅ 环境配置:
PATH包含$JAVA_HOME/bin
JAVA_HOME指向正确JDK目录
update-alternatives配置正确
✅ 权限与安全:
JDK目录权限为755
使用专用用户运行Java应用
定期更新安全补丁
- 自动化安装脚本示例
bash
#!/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-KaTeX parse error: Expected 'EOF', got '#' at position 64: …se ]; then #̲ CentOS/RHEL …{JDK_VERSION}-openjdk-devel -y
else
echo “不支持的系统,请手动安装”
exit 1
fi
配置环境变量
echo "export JAVA_HOME=/usr/lib/jvm/java-JDKVERSION−openjdk−amd64">> /.bashrcecho′exportPATH={JDK_VERSION}-openjdk-amd64" >> ~/.bashrc echo 'export PATH=JDKVERSION−openjdk−amd64">>/.bashrcecho′exportPATH=JAVA_HOME/bin:$PATH’ >> ~/.bashrc
source ~/.bashrc
echo “安装完成!”
java -version
3. 监控与维护
bash
查看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运行状态