推荐使用Oracle官方JDK-17或JDK-21(LTS),或Eclipse Temurin HotSpot构建;避免JDK-8、系统自带OpenJDK、Windows .exe安装包、macOS Homebrew openjdk及Linux apt default-jdk;正确配置JAVA_HOME指向JDK根目录并设置PATH,确保java/javac版本一致且jmod可用,IDE和构建工具需同步更新JDK路径。
直接装 jdk-17 或 jdk-21 就行,别碰 jdk-8 新项目,也别用系统自带的 openjdk(尤其 macOS)——它常缺 jpackage、jlink 或调试符号,后续打包、热部署、远程调试全可能卡住。
Oracle 官方 jdk-17(LTS)或 jdk-21(最新 LTS)是当前生产推荐。Adoptium(Eclipse Temurin)的构建也可靠,但注意选 HotSpot 而非 OpenJ9(后者对 Spring Boot 启动慢、部分 agent 不兼容)。
避坑点:
.exe 自动安装包——它会偷偷改注册表、加环境变量、还可能和旧版冲突;直接下 .zip 解压更干净Homebrew openjdk:它默认装在 /opt/homebrew/Cellar/openjdk/...,java -version 显示正常,但 javac 可能找不到,且 JAVA_HOME 指向不一致.tar.gz 包解压到 /opt/java/jdk-21 这类固定路径,别依赖 apt install default-jdk —— Ubuntu 的这个包版本老旧,且 javac 和 java 可能来自不同供应商JAVA_HOME 必须指向 JDK 根目录(不是 bin 子目录),否则 Maven、Gradle、IDEA 都会识别失败。PATH 只需追加 $JAVA_HOME/bin,别重复加 /usr/bin 类路径。
常见错误现象:
mvn compile 报错 Unsupported class file major version 65 → 实际是 mvn
在用系统老 JDK 编译,JAVA_HOME 没生效java -version 和 javac -version 输出版本不一致 → PATH 里有多个 java 或 javac,顺序错了建议操作(以 macOS / Linux 为例,在 ~/.zshrc 中写死):
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home export PATH=$JAVA_HOME/bin:$PATH
Windows 用户请用系统“环境变量”图形界面设置,不要在命令行用 set JAVA_HOME=... —— 它只对当前终端有效。
光看 java -version 不够。这三个命令全通过才算环境就绪:
java -version → 看输出含 21.0.1 且带 Temurin 或 Oracle 字样javac -version → 必须和上面主版本号一致,且不能报 command not found
java --list-modules | head -3 → 能列出模块说明 jmod 可用,Spring Boot 3+ 的 native image 构建才不会崩如果第三条卡住或报错,大概率是装了 JRE 而非 JDK,或解压不完整。
IntelliJ IDEA 默认会读取系统 JAVA_HOME,但新项目创建时仍要手动选 Project SDK —— 别信 “Use embedded JDK”,它只是 IDEA 自带的精简版,编译大项目会 OOM。
Maven 用户注意:~/.m2/settings.xml 里别配 指向老 JDK,否则 mvn clean compile 会静默降级。
Gradle 用户检查 gradle.properties 是否有 org.gradle.java.home,若有,确保它和终端 $JAVA_HOME 一致;不一致时 Gradle 会用自己的 JVM 运行,但编译用的却是另一个 JDK,导致字节码版本错乱。
真正容易被忽略的是:JDK 升级后,旧项目的 .idea/misc.xml 或 .vscode/settings.json 里可能还存着已失效的 JDK 路径,得手动清或重选一次。