Java环境是否可用,需依次验证java -version和javac -version能否正常输出版本号且无“Command not found”等错误;检查PATH是否包含JAVA_HOME/bin;确认JAVA_HOME指向JDK根目录而非JRE;排查多版本共存导致的隐性冲突。

Java环境是否可用,直接看 java -version 和 javac -version 是否能正常输出版本号,且无 Command not found 或 Unable to find java 类错误。
检查 java 命令是否在系统路径中
很多问题其实不是没装 JDK,而是 PATH 没配对。打开终端(Windows 用 CMD/PowerShell,macOS/Linux 用 Terminal),执行:
java -version
如果返回类似 java version "17.0.1",说明运行时环境 OK;若报错 command not found(Linux/macOS)或 'java' is not recognized(Windows),说明系统找不到 java 可执行文件。
- Windows 下检查
%JAVA_HOME%\bin是否已加入PATH环境变量 - macOS/Linux 检查
$JAVA_HOME/bin是否在PATH中(可用echo $PATH查看) - 别只依赖安装包自带的“添加到 PATH”选项——某些 JDK 安装器(如某些 Oracle 版本)默认不勾选,需手动确认
验证 javac 是否可用(区分 JRE 与 JDK)
java -version 成功 ≠ 开发环境就绪。JRE 只含运行时,不含编译器 javac。必须单独验证:
立即学习“Java免费学习笔记(深入)”;
javac -version
若提示 command not found 或 javac: command not found,大概率你装的是 JRE 而非 JDK,或者 JDK 安装不完整。
- JDK 安装后,
javac必须和java在同一目录下(如$JAVA_HOME/bin/javac) - 某些 Linux 发行版(如 Ubuntu)用
apt install default-jdk安装后,javac可能被软链到/usr/lib/jvm/default-java/bin/javac,但若PATH未包含该路径,仍会失败 - Mac 上通过 Homebrew 安装的 OpenJDK(如
brew install openjdk@17),默认不自动写入PATH,需手动添加export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"
确认 JAVA_HOME 是否指向正确 JDK 根目录
很多构建工具(Maven、Gradle)、IDE(IntelliJ、Eclipse)和脚本依赖 JAVA_HOME 环境变量。它必须是 JDK 的根目录(不含 /bin),例如:
- Windows:
C:\Program Files\Java\jdk-17.0.1(不是...\jdk-17.0.1\bin) - macOS:
/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home - Linux:
/usr/lib/jvm/java-17-openjdk-amd64
验证方式:
echo $JAVA_HOME # macOS/Linux
echo %JAVA_HOME% # Windows
然后检查该路径下是否存在 bin/java 和 bin/javac。若 JAVA_HOME 指向了 JRE 目录(如 .../jre),或指向了旧版本残留路径,会导致工具误用错误 JDK。
常见干扰项:多版本共存时的隐性冲突
机器上装了多个 JDK(比如 Java 8、11、17、21),容易出现「命令能跑,但 IDE 或 Maven 用的却是另一个版本」的问题。
- 用
which java(macOS/Linux)或where java(Windows)看当前 shell 调用的是哪个java - 用
/usr/libexec/java_home -V(macOS)列出所有已注册 JDK,再比对JAVA_HOME是否匹配预期版本 - Maven 默认读
JAVA_HOME,但可通过mvn -version输出中的Java version行确认实际使用版本——它可能和java -version不一致 - IDE 的 SDK 配置优先级高于系统环境变量,务必进设置里单独指定 JDK 路径,不要假设它会自动继承
JAVA_HOME
最易被忽略的一点:某些 CI/CD 环境(如 GitHub Actions 的 ubuntu-latest)默认预装多个 JDK,但 java 命令软链可能指向旧版本,必须显式用 setup-java 动作切换,否则本地测试通过、CI 构建失败。










