IDEA Maven Runner 的 JRE 设置位于 File → Settings → Build, Execution, Deployment → Build Tools → Maven → Runner(macOS 为 IntelliJ IDEA → Preferences),关键字段是 JRE 下拉框,需手动选择已注册的 OpenJDK 实例并勾选“Always use this JDK”,且必须重启 IDEA 才生效。

IDEA Maven Runner 的 JRE 设置位置在哪
这个设置不在 pom.xml 或项目 SDK 配置里,而是在 IDEA 的 Maven 运行时环境里单独指定。它控制的是 Maven 命令(如 mvn clean compile)本身由哪个 JDK 启动 —— 不是编译输出的字节码版本,而是 Maven 进程自身的运行环境。
路径是:File → Settings → Build, Execution, Deployment → Build Tools → Maven → Runner(macOS 是 IntelliJ IDEA → Preferences)。
关键字段是:JRE 下拉框。这里必须选一个已注册到 IDEA 的 OpenJDK 实例(比如 17、21),不能填路径或留空。
为什么选了 OpenJDK 还报 “Unsupported class file major version”
这是典型 Runner JRE 和 maven-compiler-plugin 配置错位导致的:Runner 用的是 OpenJDK 17,但 maven.compiler.target 设成了 21,而你的 Maven 插件版本太老(如 3.6.0)不支持 target 21。
-
maven-compiler-plugin版本必须 ≥3.10.0才支持 Java 21 编译 - Runner 的 JRE 版本 ≥
maven.compiler.target才安全(例如 target=21,Runner 至少用 OpenJDK 21) - OpenJDK 17 的
javac无法生成 major version 65(Java 21)字节码,会直接失败
查错方法:在终端执行 mvn -v,看输出的 Java version 是否和 Runner 设置一致;再看 mvn help:effective-pom 中 maven.compiler.target 实际生效值。
OpenJDK 多版本共存时怎么避免 Runner 自动降级
IDEA 有时会把系统默认 JAVA_HOME(比如指向 OpenJDK 8)偷偷塞进 Runner,尤其在重装或升级后。这不是 bug,是它读取了环境变量又没刷新缓存。
解决步骤:
- 确认系统
JAVA_HOME指向你期望的 OpenJDK(如/usr/lib/jvm/jdk-21),终端里echo $JAVA_HOME和java -version要一致 - 在 IDEA 的
Runner页面,不要选Bundled (JetBrains Runtime)—— 它不是 OpenJDK,且版本固定 - 点击
JRE右侧的…,选择Add JDK…→Path,手动定位到 OpenJDK 根目录(不是bin子目录) - 选中该 JDK 后,勾选下方
Always use this JDK for running Maven(这个选项容易被忽略) - 点
Apply,然后关闭 Settings,**重启 IDEA** —— 不重启,Runner 设置可能不生效
pom.xml 里 maven.compiler.source/target 和 Runner JRE 的关系
二者完全独立,但协同决定最终行为:
-
Runner JRE:决定mvn进程能否跑起来、能否调用对应版本的javac -
maven.compiler.source:告诉maven-compiler-plugin源码语法允许用到哪一版(如21允许使用 record、pattern matching) -
maven.compiler.target:决定生成的.class文件兼容哪个 JVM(major version),必须 ≤ Runner JRE 支持的最高版本
常见误配:
Runner 用 OpenJDK 17,target 设 21 → 报错 Unsupported target release 21
Runner 用 OpenJDK 21,target 设 17 → 成功,但字节码是 17 兼容,无法运行 record 等 21 特性
最稳妥组合:Runner JRE 版本 ≥ target,且 source ≤ target(如都设为 21)
真正容易被忽略的点:Runner 设置不重启 IDEA 就不生效,且 Always use this JDK 默认是关着的 —— 这两个动作漏掉任何一个,都会让 Maven 表面“正常”,实则用错 JDK 编译。


















