MacBook Pro(M1/ARM64)配JDK21与Gradle的核心是确保JAVA_HOME指向ARM64版JDK21、Gradle识别该JDK且不与IDE冲突;需用/usr/libexec/java_home -v 21动态设置JAVA_HOME,选Gradle 8.10+,并校验gradle-wrapper.properties中distributionUrl版本。

MacBook Pro(M1/ARM64)上配 JDK 21 和 Gradle,核心不是“装完就行”,而是要确保 JAVA_HOME 指向正确的 ARM64 版本、gradle 命令能识别该 JDK、且不和 IntelliJ 或 VS Code 的 SDK 设置冲突。硬编码路径或忽略 shell 初始化顺序,90% 的问题都出在这儿。
确认 JDK 21 是 ARM64 架构版本
很多报错(比如 Unsupported class file major version 65 或 Gradle 启动失败)根源是装了 x64 版 JDK,靠 Rosetta 运行——性能差,还容易触发 JVM 兼容性问题。
- 终端执行:
uname -m,输出必须是arm64 - 再运行:
/usr/libexec/java_home -V,检查列表里带arm64或Apple Silicon标识的 JDK 21 条目(如temurin-21.jdk/Contents/Home) - 如果只看到
x86_64版本,说明装错了。卸载后去 Adoptium 下载OpenJDK21U-jdk_arm64_mac_hotspot_21.0.1_12.tar.gz或.pkg安装包
用 /usr/libexec/java_home 动态设 JAVA_HOME
别写死路径(比如 /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home),M1 Mac 上多个 JDK 共存很常见,硬编码极易失效。
- 编辑
~/.zprofile(比~/.zshrc更可靠,登录 shell 自动加载) - 添加这两行:
export JAVA_HOME=$(/usr/libexec/java_home -v 21) export PATH=$JAVA_HOME/bin:$PATH
- 新开终端,验证:
echo $JAVA_HOME应输出真实路径;java -version必须显示21.0.1且含ARM64或Temurin字样
Gradle 8.10+ 才真正支持 JDK 21 虚拟线程
Gradle 8.3 及更早版本在编译或运行含虚拟线程(Thread.ofVirtual())的代码时会报错,不是语法问题,是 Gradle 自身 JVM 启动参数没适配。
- 优先选 Gradle 8.10 或更高(如
8.14.3),官网下载-bin.zip包即可 - 解压后设
GRADLE_HOME,并把$GRADLE_HOME/bin加入PATH(同样写进~/.zprofile) - 关键一步:在
~/.gradle/gradle.properties中加一行:org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m
(避免 JDK 21 的 ZGC 默认参数与旧版 Gradle 冲突) - 验证:
gradle -v输出的 “JVM” 行应显示你刚配的 JDK 21 路径
IntelliJ IDEA 里别依赖自动检测
IDEA 有时会从系统 PATH 拿到一个“看起来像 JDK”的路径,但实际是 Rosetta 转译的 x64 版,或者指向 JRE 而非 JDK。
- 打开 Preferences → Project → Project SDK,点
+→Add JDK…→ 选Path... - 手动导航到
/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home(或你用/usr/libexec/java_home -v 21查到的真实路径) - 同时检查 Build → Build Tools → Gradle 里的
Gradle JVM是否也设为同一 JDK —— 这个设置独立于项目 SDK,漏设会导致构建时报class file has wrong version
最易被忽略的是 Gradle Wrapper 项目里的 gradle/wrapper/gradle-wrapper.properties 文件:它指定的 distributionUrl 如果指向旧版 Gradle(如 gradle-7.6-bin.zip),就算你本地装了 8.14,项目仍会下载并使用 7.6,直接绕过所有本地配置。


















