windows装jdk需手动设无空格路径如d:\dev\jdk21,配java_home和path中%java_home%\bin;macos须按芯片选arm64/x64安装包并配置java_home;linux推荐sdkman或tar.gz安装,注意glibc版本与jdk兼容性。

Windows装JDK:别点“下一步”就完事,路径和环境变量才是关键
装完JDK却运行不了java -version?大概率是路径或环境变量错了。Windows安装器默认会往C:\Program Files\Java\jdk-21这类带空格的路径装,而%JAVA_HOME%里含空格会导致javac、Maven甚至IDEA识别失败。
实操建议:
- 安装时手动改路径,用纯英文无空格格式,比如
D:\Dev\jdk21,并记牢这个位置 - 安装完必须配两个系统环境变量:
JAVA_HOME(值为JDK根目录,不含\bin),以及Path里追加%JAVA_HOME%\bin - 别勾选“Public JRE”,避免和JDK自带JRE冲突;也别装多个JDK到同一级目录下,容易被
Path误读 - 验证命令不是只敲
java -version,还得补一句javac -version——前者可能调到旧版JRE,后者才真正测编译器是否就位
macOS装JDK:Intel和M系列芯片不能混用安装包
在M1/M2/M3 Mac上装x64版JDK,java能跑但javac可能报Bad CPU type in executable,因为部分工具链不兼容Rosetta二进制翻译。
实操建议:
- 查清芯片类型:苹果菜单 → “关于本机”,看“芯片”项是“Apple M1”还是“Intel Core iX”
- Apple Silicon必须下
arm64 Installer(文件名含aarch64或macos-aarch64);Intel芯片选x64 Installer(含macos-x64) - macOS不依赖
JAVA_HOME也能运行java,但IntelliJ、Gradle等工具强依赖它,所以仍要手动配置,推荐写入~/.zshrc:export JAVA_HOME=$(/usr/libexec/java_home -v 21)
- 别用Homebrew装Oracle JDK,它默认装OpenJDK;如果项目明确要求Oracle版,必须官网下载dmg手动装
Linux装JDK:包管理器快但版本滞后,压缩包灵活但得自己管更新
Ubuntu用apt install openjdk-21-jdk确实三秒搞定,但实际装的是21.0.3+7这种子版本,而Spring Boot 3.3.0要求21.0.4+,就会卡在编译阶段报Unsupported class file major version。
实操建议:
- 开发机优先用SDKMAN:
sdk install java 21.0.4-tem,版本精确、切换自由、多版本共存不打架 - 服务器部署选手动tar.gz:从Adoptium或Eclipse Temurin下载
jdk-21.0.4_linux-x64_bin.tar.gz,解压到/opt/jdk21,再用update-alternatives注册,避免硬编码路径 - 别把
JAVA_HOME写死在/etc/environment里——不同用户可能需要不同JDK,应放在/etc/profile.d/java.sh中统一export - 检查glibc版本:
ldd --version,低于2.28的CentOS 7系统无法运行JDK 21+,得降级用JDK 17
JDK版本选错的典型症状:不是报错,而是“看起来正常却编译失败”
选JDK 8跑Spring Boot 3.x,控制台没报错,但@RestController返回404;用JDK 21编译Java 8源码,mvn compile成功,但运行时报java.lang.NoSuchMethodError——这些都不是环境没配好,是版本语义不匹配。
判断依据:
-
javac -source 8 -target 8 HelloWorld.java:强制指定源码和字节码版本,可暴露JDK内部兼容性断层 - Maven项目看
pom.xml里的maven-compiler-plugin配置,<source></source>和<target></target>必须≤JDK主版本,且≥项目依赖框架最低要求 - Spring Boot官方文档明确写清支持的JDK范围,比如3.3.x只支持JDK 17/21,JDK 22不在列表里就别试
- 别信“高版本向下兼容”的直觉——JDK 21删了
javax.xml.bind,JDK 22移除了SecurityManager,这些是静默破坏性变更
最常被忽略的一点:JDK安装后,IDE(如IntelliJ)不会自动感知新版本,必须手动在Project Structure → SDKs里重新添加,否则编辑器里语法提示、调试器断点全按旧JDK规则走,问题藏得深、难定位。











