应先确认系统架构和JDK版本需求,优先选用Adoptium(Eclipse Temurin)的OpenJDK 21,解压至/usr/lib/jvm/并配置JAVA_HOME与PATH,再用update-alternatives管理多版本共存及默认切换。

确认系统架构和JDK版本需求
Linux下装JDK前,先用 uname -m 看是 x86_64、aarch64 还是其他架构,再决定下载哪个JDK包。OpenJDK 17/21 是当前主流长期支持版,Oracle JDK 虽可商用但需注意许可协议;Adoptium(Eclipse Temurin)是更推荐的开源替代。
常见错误:下载了 tar.gz 包却误以为是安装器(Linux没.exe或.msi),或选错架构导致 bash: /usr/lib/jvm/jdk-21/bin/java: cannot execute binary file: Exec format error。
- 查系统位数:
getconf LONG_BIT - 查已装Java:
which java和java -version(可能指向系统自带的openjdk-11等) - 优先从 https://www.php.cn/link/e387385ebe0dbeefed3e8e9f3968aaba 下载
jdk-21.0.3+9_hotspot_*.tar.gz类型包
解压JDK到标准路径并验证可执行性
别把JDK丢进 /home/xxx/Downloads 或临时目录——后续配置环境变量会混乱,也违背Linux惯例。统一解压到 /usr/lib/jvm/,该路径被多数发行版(Ubuntu/Debian/CentOS/RHEL)默认用于管理多版本JDK。
操作时注意权限:普通用户不能直接写 /usr/lib/jvm,需 sudo;解压后要确保 bin/java 有执行权限(一般默认就有,但若手动改过权限或挂载NTFS分区可能丢失)。
立即学习“Java免费学习笔记(深入)”;
sudo mkdir -p /usr/lib/jvm sudo tar -xzf jdk-21.0.3+9-hotspot_linux-x64.tar.gz -C /usr/lib/jvm/ sudo chown -R root:root /usr/lib/jvm/jdk-21.0.3+9-hotspot ls -l /usr/lib/jvm/jdk-21.0.3+9-hotspot/bin/java
输出应含 -rwxr-xr-x,否则补上:sudo chmod +x /usr/lib/jvm/jdk-21.0.3+9-hotspot/bin/java。
配置JAVA_HOME与PATH的三种方式及适用场景
JAVA_HOME 必须指向JDK根目录(不是 bin 子目录),而 PATH 需包含 $JAVA_HOME/bin。配置位置取决于生效范围:
PHP网络编程技术详解由浅入深,全面、系统地介绍了PHP开发技术,并提供了大量实例,供读者实战演练。另外,笔者专门为本书录制了相应的配套教学视频,以帮助读者更好地学习本书内容。这些视频和书中的实例源代码一起收录于配书光盘中。本书共分4篇。第1篇是PHP准备篇,介绍了PHP的优势、开发环境及安装;第2篇是PHP基础篇,介绍了PHP中的常量与变量、运算符与表达式、流程控制以及函数;第3篇是进阶篇,介绍
- 只对当前用户生效:写入
~/.bashrc或~/.zshrc(Zsh用户) - 对所有用户生效且开机即载入:写入
/etc/profile.d/java.sh(推荐,不污染全局profile) - 仅终端图形界面程序能识别(如IDE启动脚本):还需在桌面环境配置(如Ubuntu的
~/.profile)
别在 /etc/environment 里写 $JAVA_HOME ——该文件不解析变量,只能写绝对路径,且不支持 export 语法。
echo 'export JAVA_HOME=/usr/lib/jvm/jdk-21.0.3+9-hotspot' | sudo tee /etc/profile.d/java.sh echo 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile.d/java.sh source /etc/profile.d/java.sh
验证:echo $JAVA_HOME 应输出路径,java -version 和 javac -version 都应显示21.0.3。
处理多JDK共存与默认版本切换
系统可能已有OpenJDK 11或17,java -version 显示的未必是你刚装的21。不要手动删旧版本——很多系统工具依赖它。用 update-alternatives 管理更安全。
关键点:必须为每个命令(java、javac、jar)分别注册,且优先级(priority)值越大越优先。漏配 javac 会导致IDE编译报错“找不到编译器”,但 java -version 看起来正常。
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-21.0.3+9-hotspot/bin/java 200 sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-21.0.3+9-hotspot/bin/javac 200 sudo update-alternatives --config java sudo update-alternatives --config javac
执行最后两行会弹出交互菜单,输入对应编号即可切换。如果没看到选项,说明旧JDK没用 update-alternatives 注册过,需先补注册或临时用 export JAVA_HOME=... 覆盖。
真正容易被忽略的是:某些CI工具(如Jenkins agent)、systemd服务、或以 sudo 启动的进程,不会读取你的shell配置,它们只认 /usr/bin/java 的软链接——而这正是 update-alternatives 在背后维护的。









