PATH未配置JDK的bin目录会导致java命令找不到,需将对应路径加入PATH并重启终端;JAVA_HOME应指向JDK根目录,PATH须包含$JAVA_HOME/bin;多版本共存时PATH顺序决定默认JDK,建议统一验证java/javac版本、JAVA_HOME及编译运行。

PATH 变量没配对,java 命令根本找不到
Java 运行依赖 java、javac 等可执行文件,它们不在系统默认路径里。如果 PATH 没包含 JDK 的 bin 目录,终端输入 java -version 就会报 command not found 或 'java' is not recognized。
- Windows 下要加的是类似
C:\Program Files\Java\jdk-17.0.1\bin这样的完整路径(注意用反斜杠或正斜杠均可,但不能漏掉\bin) -
macOS / Linux 下常见路径是
/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home/bin(macOS)或/usr/lib/jvm/java-17-openjdk-amd64/bin(Ubuntu) - 添加后必须新开终端生效;Windows 用户改完环境变量要重启 CMD 或 PowerShell,或者用新窗口验证
PATH 里多个 JDK 路径时,谁在前面谁生效
PATH 是从左到右搜索的。如果你装了 JDK 8 和 JDK 17,又把 JDK 8 的 bin 放在前面,那运行 java -version 显示的就是 1.8 —— 即使你刚装完 JDK 17。
- 用
which java(macOS/Linux)或where java(Windows)查实际调用的是哪个java - 用
readlink -f $(which java)(Linux)或Get-Command java | Select-Object -ExpandProperty Definition(PowerShell)可追到真实路径 - 不要靠删旧 JDK 来“清理”,直接调整
PATH中目录顺序更安全
JAVA_HOME 和 PATH 的关系不是可选,而是分工明确
JAVA_HOME 不影响 java 命令能否运行,但它被很多工具(Maven、Gradle、IDEA、Tomcat)用来定位 JDK 根目录。而 PATH 才决定命令行能不能敲出 java。
-
JAVA_HOME应该指向 JDK 根目录,比如/usr/lib/jvm/java-17-openjdk-amd64,不是bin子目录 -
PATH必须包含$JAVA_HOME/bin(Linux/macOS)或%JAVA_HOME%\bin(Windows),否则两者脱节 - Maven 的
mvn compile可能成功,但java -jar xxx.jar报错,往往就是PATH没同步更新导致的
IDE 内置 JDK 和系统 PATH 冲突很常见
IntelliJ 或 Eclipse 默认用自己配的 JDK 运行项目,但你在终端里敲 java 仍是走系统 PATH。这就造成“IDE 能跑,命令行跑不了”或反过来。
立即学习“Java免费学习笔记(深入)”;
- 检查 IDE 的 Project SDK 和 Project language level,和终端
java -version输出是否一致 - Gradle 构建脚本里若写了
sourceCompatibility = JavaVersion.VERSION_17,但终端javac是 1.8,编译会失败,且错误提示不直接指向环境问题 - CI/CD 流水线(如 GitHub Actions)里没显式配置
PATH或JAVA_HOME,很容易复现本地没问题、线上挂掉的情况
java -version、javac -version、$JAVA_HOME 值、以及一个最简 public static void main 类能否编译运行。










