问题描述
- 新建空项目时,设置项目 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
- ✓ 检查 Per-module bytecode version 表格
- ✓ 确认问题模块的 Target bytecode version
- ✓ 操作:删除或改为正确版本
- Project Structure - Modules
File → ProjectStructure → Modules → [选择模块] → Language level
- ✓ 检查每个模块的 Language level
- ✓ 操作:改为与 SDK 一致的版本
- Project Structure - Project
File → ProjectStructure → Project
- ✓ 检查 Project SDK
- ✓ 检查 Project language level
- ✓ 操作:确保两者一致
第二优先级:Maven 配置
- POM 文件 - properties
<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties>
- POM 文件 - compiler 插件(如果存在)
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target><release>8</release><!-- 注意这个!--></configuration></plugin></plugins></build>
- Maven Runner - JRE 设置
Settings → Build,Execution,Deployment → BuildTools → Maven → Runner
- ✓ 检查 JRE 是否使用 Project JDK
第三优先级:外部配置(少见但可能)
- 项目的.mvn 目录
项目根目录/.mvn/
- ✓ 检查 jvm.config 文件(是否有 --release 17)
- ✓ 检查 maven.config 文件
- Maven 全局 settings.xml
~/.m2/settings.xml
- ✓ 检查是否有激活的 profile 设置了 Java 版本
修改后的标准操作:
- 修改完配置
- File → Invalidate Caches / Restart
- 右键 POM → Maven → Reload project
- mvn clean compile 验证
预防措施:
创建新模块后,必查 Per-module bytecode version 定期检查 Java Compiler 设置,保持为空(使用项目默认) 在 POM 中明确指定 compiler 插件配置

