问题描述
- 新建空项目时,设置项目 SDK 为 1.8,language level 也是 8
- 新建模块时,模块 JDK 也设置成项目 JDK 即 1.8
- 新建后,确认了 Project Structure 中 Project 部分的 SDK 和 language level 都是对的
问题出现:运行一个测试方法时,提示 java:无效的目标发行版:17;源发行版 17 需要目标发行版 17
这时发现 Project Structure 中 Modules 部分中那个新建的模块的 language level 是 17,修改后,再使用 mvn clean compile,再运行测试方法仍然报错如上
问题解决
- 检查 pom.xml 文件(没问题)
<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties>
-
检查 IntelliJ IDEA 的 Maven 设置(没问题) 打开 File → Settings → Build, Execution, Deployment → Build Tools → Maven → Runner 找到 JRE 选项,确保选择的是 Project JDK 或明确选择 Java 8
-
检查 IntelliJ IDEA 的 Java Compiler 设置(问题所在) 打开 Settings → Build, Execution, Deployment → Compiler → Java Compiler
- 查看 Project bytecode version 是否设置为 17
- 查看 Per-module bytecode version 表格中,project01 模块的 Target bytecode version 是否被设置为 17
- 建议:将这些都改为 8 或留空(使用项目默认)
发现这里的 project01 模块的 Target bytecode version 确认为 17,而不是所需要的 8
问题出现的原因
为什么会出现该问题?配置优先级导致的覆盖
配置优先级顺序(从高到低):
- Java Compiler 的 Per-module 设置(最高优先级)← 这里被设置成了 17
- Maven 的 compiler 插件配置
- POM 文件中的 maven.compiler.target
- Project SDK 设置
所以即使 POM 文件配置正确(Java 8),但 Per-module 设置(Java 17)优先级更高,就会覆盖它。
Java 版本冲突排查顺序
每次创建新模块后: ✓ 检查 Project Structure → Modules → Language level ✓ 检查 Settings → Compiler → Java Compiler → Per-module 设置 ✓ 执行一次 mvn clean compile 验证
第一优先级:IDE 编译器设置(80% 的问题在这里)
- Java Compiler - Per-module 设置(最高优先级)
Settings → Build,Execution,Deployment → Compiler → JavaCompiler

