根本原因是java_home未正确指向jdk根目录或path未包含$java_home/bin,导致系统找不到java命令。

Java环境变量配错导致 java -version 报 “command not found”
根本原因不是没装JDK,而是JAVA_HOME没设对,或PATH里漏了$JAVA_HOME/bin。Mac/Linux用户常把JAVA_HOME指向/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home这种完整路径,但实际应确认bin/java是否存在——用ls -l $JAVA_HOME/bin/java验证。
Windows下容易把JAVA_HOME设成C:\Program Files\Java\jdk-17.0.1却忘了用英文引号包裹含空格的路径,结果java命令在CMD里直接失效。
-
JAVA_HOME必须指向JDK根目录(含bin、lib子目录),不能指向jre或jdk-xx.x.x/bin - Windows的
PATH中添加%JAVA_HOME%\bin,不要写死绝对路径 - 改完后新开终端生效,
echo $JAVA_HOME(Mac/Linux)或echo %JAVA_HOME%(Windows)先确认变量已加载
IntelliJ IDEA识别不到已安装的JDK 17+(尤其macOS Sonoma之后)
IDEA默认只扫描系统级JDK安装路径,而Homebrew或SDKMAN安装的JDK常在非标准位置,比如~/.sdkman/candidates/java/current或/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk。IDEA的Project Structure里显示“Unconfigured JDK”,不是IDE坏了,是它压根没去那里找。
更隐蔽的问题:macOS Sonoma之后,Apple限制了对/usr/bin/java的调用权限,即使java -version能跑,IDEA内部检测仍可能失败。
立即学习“Java免费学习笔记(深入)”;
- 手动添加JDK:File → Project Structure → Platform Settings → SDKs → “+” → “Add JDK” → 选中
bin/java所在目录的父目录 - 避免用
/usr/bin/java软链接路径,IDEA需要真实JDK根路径 - 如果用Zsh,确保
.zshrc里export JAVA_HOME语句在source $HOME/.sdkman/bin/sdkman-init.sh之后,否则IDEA启动时读不到最新值
Maven编译报错 Unsupported class file major version 61
这是典型的JDK版本错配:项目用JDK 17编译(class file major version 61),但Maven底层用的是JDK 8或11。Maven本身不自带JDK,它依赖JAVA_HOME或maven.compiler.source/target配置,但这两个地方不一致就会打架。
常见于CI环境或团队协作时——本地IDE用JDK 17,但mvn compile走的是系统默认JDK。
- 检查
mvn -v输出的“Java version”,它反映Maven实际使用的JDK,和java -version可能不同 - 在
pom.xml里显式锁定编译版本:<properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties>
- Linux/macOS下可临时指定:
JAVA_HOME=/path/to/jdk-17 mvn compile,比改全局JAVA_HOME更安全
运行Spring Boot项目卡在 Starting Servlet Web Server 不进主类
不是代码问题,大概率是JDK和Spring Boot版本不兼容。Spring Boot 3.x要求JDK 17+,但某些早期JDK 17构建(如17.0.0、17.0.1)存在TLS握手或NIO bug,导致内嵌Tomcat/Jetty启动超时或阻塞。
另一个高频原因是IDEA的“Build project automatically”未开启,或启用了“Delegate IDE build/run actions to Maven”,但Maven未配置spring-boot-maven-plugin的repackage目标,导致运行的是旧class而非重新打包后的fat jar。
- 优先升级到JDK 17.0.8+或21 LTS,避开已知TLS/NIO缺陷
- 检查
target/classes下是否有更新后的application.properties和主类.class文件,没有说明编译没触发 - 禁用IDEA的“Delegate to Maven”选项,改用IDEA原生编译器,避免插件配置遗漏
JDK路径层级深、版本碎片多、工具链耦合紧——环境问题从来不是“装完就完”,而是每次切换项目、升级依赖、换机器时都要重新过一遍的隐性成本。










