最稳妥方式是修改 /etc/profile 并执行 source /etc/profile 刷新,否则新开终端也不生效;需先用 java -version 和 which java 确认是否已装 jdk,避免路径冲突或残留旧版本导致命令不一致。

直接改 /etc/profile 最稳妥,但必须用 source /etc/profile 刷新,否则新开终端也不生效;别信“保存就自动生效”这种说法。
先确认系统是否已装 JDK,避免冲突
执行 java -version 和 which java。如果返回版本号且路径在 /usr/bin/java 或类似位置,大概率是系统自带的 OpenJDK(比如 CentOS/RHEL 的 java-1.8.0-openjdk)。这类包用 rpm -qa | grep java 能列出来,用 rpm -e --nodeps 强制卸载——不卸干净,后续 JAVA_HOME 指向新 JDK 后,java 命令仍可能调用旧的。
常见错误现象:
-
java -version显示旧版本,但javac -version报错或显示新版本 → PATH 里混了多个 bin 目录 - 执行
java成功,javac失败 → 只装了 JRE,没装 JDK;或$JAVA_HOME/bin没加进PATH
解压后把 JDK 放哪?路径别带空格和中文
推荐放 /usr/local/jdk 或 /opt/jdk,权限统一、路径稳定、所有用户可读。别放 /root 下——普通用户根本访问不了;也别放 ~/jdk ——切换用户或 su 到 root 就失效。
解压命令用 tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local/,解完执行 ls -l /usr/local/jdk* 确认目录名(如 /usr/local/jdk1.8.0_221),这个完整路径就是后续 JAVA_HOME 的值。
注意点:
- 路径中不能有软链接嵌套,
JAVA_HOME必须指向实际解压后的根目录(含bin/、lib/子目录) - 别用
ln -s创建别名目录再设JAVA_HOME指向它——某些 JVM 启动器(如 Tomcat 的catalina.sh)会解析真实路径,软链可能触发权限或识别失败
写进哪个配置文件?按生效范围选
优先顺序:系统级 > 当前用户级 > 当前终端级。生产环境建议用系统级配置,避免不同用户行为不一致。
/etc/profile:对所有用户永久生效,需 source /etc/profile 刷新;适合服务器部署
~/.bashrc:仅当前用户,每次开新终端自动加载;适合开发机多 JDK 切换场景
别碰 /etc/environment:它不支持变量展开($JAVA_HOME 会被当字面量),设了也白设
编辑时追加这三行(注意等号两边**不能有空格**):
export JAVA_HOME=/usr/local/jdk1.8.0_221 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
其中 CLASSPATH 在 JDK 8+ 已非必需,但保留无害;dt.jar 和 tools.jar 在 JDK 9+ 已移除,若用 JDK 11+,这行可简化为 export CLASSPATH=.。
验证和排错:别只看 java -version
真正要测的是三件事:
-
echo $JAVA_HOME→ 看输出是否为你设置的绝对路径 -
which java→ 输出应为$JAVA_HOME/bin/java,不是/usr/bin/java -
javac -version→ 必须能执行,否则PATH没生效或 JDK 包不完整
最容易被忽略的点:改完配置文件后,忘了 source;或者用了 vi ~/.bash_profile 却在 bashrc 里测试;又或者用 su 切换用户后,新 shell 没加载对应用户的配置文件——这时得手动 source ~/.bashrc 或重新登录。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











