必须先确认系统架构(x86_64/aarch64)和发行版(Ubuntu/CentOS等),再下载匹配的JDK tar.gz包;推荐Adoptium OpenJDK 17/21 LTS,解压后正确设置JAVA_HOME(指向根目录,非bin或~缩写),并用update-alternatives管理多版本。

确认系统架构和JDK版本再下载
Linux装Java不是“下个包解压就行”,最容易卡在jdk-xx_linux-x64_bin.tar.gz和jdk-xx_linux-aarch64_bin.tar.gz选错——x86_64机器硬装aarch64包,java -version直接报cannot execute binary file: Exec format error。
先跑这条命令看清楚底子:uname -m —— 输出x86_64还是aarch64(树莓派、Mac M系列虚拟机常见)cat /etc/os-release —— 看是Ubuntu/Debian系还是CentOS/RHEL系,决定后续用apt还是yum/dnf
- 生产环境建议用
tar.gz手动解压方式,避免包管理器自动升级打乱JAVA_HOME - OpenJDK 17/21 是当前LTS主流,别碰JDK 8(已EOL)或JDK 22(非LTS)
- Oracle JDK需登录账号下载,且商用要授权;Adoptium(Eclipse Temurin)是更稳妥的免费替代
解压后必须正确设置JAVA\_HOME和PATH
JAVA_HOME设错是配置失败的头号原因。它不能指向bin目录,也不能用~缩写,更不能漏掉版本子目录。
比如解压到/opt/jdk-17.0.1,那JAVA_HOME必须是/opt/jdk-17.0.1,不是/opt/jdk-17.0.1/bin,也不是~/jdk-17.0.1。
- 临时生效:运行
export JAVA_HOME=/opt/jdk-17.0.1和export PATH=$JAVA_HOME/bin:$PATH - 永久生效:写进
~/.bashrc(普通用户)或/etc/profile.d/java.sh(全局),注意文件要有执行权限 - 验证是否生效:
echo $JAVA_HOME和which java必须指向你刚解压的路径
多个JDK共存时用update-alternatives切版本(Debian/Ubuntu)
装了OpenJDK 11、17、21,但java -version始终不切换?说明没注册进update-alternatives体系,光改PATH没用。
立即学习“Java免费学习笔记(深入)”;
核心三步:sudo update-alternatives --install /usr/bin/java java /opt/jdk-17.0.1/bin/java 1701sudo update-alternatives --install /usr/bin/javac javac /opt/jdk-17.0.1/bin/javac 1701sudo update-alternatives --config java —— 弹出菜单选编号
- 优先级数字(如1701)越大,越可能被默认选中;不同JDK设不同值,避免冲突
-
--install只用一次,重复执行会多出冗余选项;删旧项用--remove - RHEL/CentOS用
alternatives --install,命令参数基本一致
IDE或Maven仍报找不到tools.jar或javac?检查JDK完整包
某些精简版JDK(如Alpine Linux上的openjdk17-jre)根本不带javac和tools.jar,只够运行,没法编译——IDE新建项目失败、Maven报Cannot find symbol或Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin都源于此。
- 确认安装的是
jdk而非jre:解压目录里要有bin/javac和lib/tools.jar(JDK 9+后改名lib/classes.jar,但Maven插件仍依赖该路径结构) - IntelliJ IDEA里不要只信
Project SDK下拉框,点进去看Path是不是真实指向jdk-xx根目录,而非/usr/lib/jvm/default-java这种软链(可能指向jre) - Maven项目若指定
source/target为17,但mvn -v显示Java version是11,说明Maven没读取你的JAVA_HOME,得在~/.mavenrc里显式写export JAVA_HOME=...
真正麻烦的从来不是下载链接或解压命令,而是JAVA_HOME路径多一个字符、update-alternatives少注册一个javac、或者误装了jre包——这些地方一错,所有上层工具全瘫痪,还很难定位。

















