推荐首选eclipse temurin(adoptium)下载openjdk 17或21 lts版本,注意匹配系统架构(x64/aarch64),解压至/usr/lib/jvm等标准路径,正确配置java_home和path并验证生效。

直接解压 + 配置 JAVA_HOME 和 PATH 就能用,不用编译、不改系统默认 JDK,但环境变量必须配对且生效。
下载 OpenJDK 压缩包时注意源和架构
别从 Oracle 官网下(要登录),优先用 Eclipse Temurin(Adoptium)或华为镜像站。确认你的 CPU 架构是 x86_64 还是 aarch64(比如鲲鹏、树莓派),下错包解压后 java -version 会报 cannot execute binary file: Exec format error。
- Temurin 17(推荐 LTS):
wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.10%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.10_7.tar.gz - 华为镜像(国内快):
wget https://mirrors.huaweicloud.com/openjdk/17.0.10+7/jdk-17.0.10+7_linux-x64_bin.tar.gz - 解压前先检查文件完整性:
sha256sum jdk-17.0.10+7_linux-x64_bin.tar.gz(对比官网发布的 checksum)
解压到标准路径并验证目录结构
解压位置影响后续配置的稳定性。不建议解压到 ~/Downloads 或临时目录,因为用户家目录权限可能受限,且重装系统易丢失。统一用 /usr/lib/jvm 或 /opt/java:
- 创建目标目录:
sudo mkdir -p /usr/lib/jvm - 解压(保留原目录名):
sudo tar -xzf jdk-17.0.10+7_linux-x64_bin.tar.gz -C /usr/lib/jvm/ - 确认解压结果:
ls -d /usr/lib/jvm/jdk-17.0.10+7—— 必须看到这个完整子目录,不是嵌套在另一层里 - 进目录检查关键文件:
ls /usr/lib/jvm/jdk-17.0.10+7/bin/java,存在才说明解压成功
配置 JAVA_HOME 和 PATH 的坑点
很多人配了却没生效,问题常出在 shell 类型、配置文件作用域、路径拼写三处。
- 只改
~/.bashrc不够:如果用的是zsh(如 macOS 或新版 Ubuntu),得改~/.zshrc;如果是系统级服务(如 systemd 启动的 Java 应用),需在/etc/environment或服务 unit 文件里显式设置 -
JAVA_HOME必须指向 JDK 根目录,不能带/bin:export JAVA_HOME=/usr/lib/jvm/jdk-17.0.10+7(错例:/usr/lib/jvm/jdk-17.0.10+7/bin) -
PATH要包含$JAVA_HOME/bin,且应放在最前面,避免系统自带的openjdk-11-jdk被优先命中:export PATH=$JAVA_HOME/bin:$PATH - 生效命令:
source ~/.bashrc(或对应配置文件),然后运行echo $JAVA_HOME和which java双重验证
多版本共存时怎么安全切换
手动安装多个 JDK(如 11/17/21)后,java -version 显示的永远是 PATH 最前面那个,不是 JAVA_HOME 指向的——这点极易误解。
- 不要靠反复改
~/.bashrc切换:容易漏 reload 或污染全局 PATH - 推荐用
update-alternatives(Debian/Ubuntu)或alternatives(RHEL/CentOS)注册所有 JDK:sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-11.0.22/bin/java 1,再--config java交互选择 - 或者写个轻量脚本:
jdk17,内容为export JAVA_HOME=/usr/lib/jvm/jdk-17.0.10+7; export PATH=$JAVA_HOME/bin:$PATH,放进/usr/local/bin并chmod +x,需要时直接运行 - 特别注意:Maven、Gradle 等工具默认读
JAVA_HOME,但 IDE(如 IntelliJ)通常用自己的 JDK 配置,不走系统变量
真正麻烦的从来不是解压,而是环境变量在不同上下文(终端、GUI 应用、systemd 服务、CI 流水线)中是否一致生效。每次配完,务必在新终端里跑 java -version 和 javac -version,两个都对才算落地。











