【报错解决】java:无效的目标发行版:17;源发行版17需要目标发行版17

问题描述

1、新建空项目时,设置项目SDK为1.8,language level也是8
2、新建模块时,模块JDK也设置成项目JDK即1.8
3、新建后,确认了Project Structure中Project部分的SDK和language level都是对的

问题出现:运行一个测试方法时,提示 java:无效的目标发行版:17源发行版 17 需要目标发行版 17

这时发现Project Structure中Modules部分中那个新建的模块的language level是17,修改后,再使用mvn clean compile,再运行测试方法仍然报错如上

问题解决

1、检查pom.xml文件(没问题)

<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties>

1、检查IntelliJ IDEA的Maven设置:(没问题)
打开 File → Settings → Build, Execution, Deployment → Build Tools → Maven → Runner
找到 JRE 选项,确保选择的是 Project JDK 或明确选择 Java 8

2、检查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%的问题在这里)

  1. Java Compiler - Per-module设置(最高优先级)
Settings → Build,Execution,Deployment → Compiler → JavaCompiler
  • ✓ 检查 Per-module bytecode version 表格
  • ✓ 确认问题模块的 Target bytecode version
  • ✓ 操作:删除或改为正确版本
  1. Project Structure - Modules
File → ProjectStructure → Modules → [选择模块] → Language level 
  • ✓ 检查每个模块的 Language level
  • ✓ 操作:改为与SDK一致的版本
  1. Project Structure - Project
File → ProjectStructure → Project
  • ✓ 检查 Project SDK
  • ✓ 检查 Project language level
  • ✓ 操作:确保两者一致

第二优先级:Maven配置

  1. POM文件 - properties
<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties>
  1. 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>
  1. Maven Runner - JRE设置
Settings → Build,Execution,Deployment → BuildTools → Maven → Runner
  • ✓ 检查 JRE 是否使用 Project JDK

第三优先级:外部配置(少见但可能)

  1. 项目的.mvn目录
项目根目录/.mvn/
  • ✓ 检查 jvm.config 文件(是否有 --release 17)
  • ✓ 检查 maven.config 文件
  1. 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插件配置

Read more

【一天一个计算机知识】—— 【 C/C++ 内存管理与分布】

【一天一个计算机知识】—— 【 C/C++ 内存管理与分布】

⚡ CYBER_PROFILE ⚡ /// SYSTEM READY /// [WARNING]: DETECTING HIGH ENERGY 🌊 🌉 🌊 心手合一 · 水到渠成 >>> ACCESS TERMINAL <<<[ 🦾 作者主页 ][ 🔥 C语言核心 ][ 💾 编程百度 ][ 📡 代码仓库 ] --------------------------------------- Running Process: 100% | Latency: 0ms 索引与导读 * 🚩一、C/C++ 内存分布 * 🚩二、C语言的动态内存管理 * 💪C动态内存管理的面试考点 * 1)realloc的工作机制 * 2)malloc/calloc/realloc的区别是什么? * 🚩三、C++ 动态内存管理 * 1)操作内置类型 * 1.1)单个变量的分配和释放

By Ne0inhk
C++ 中CAS原子操作详解

C++ 中CAS原子操作详解

在 C++ 中,CAS 操作主要通过 <atomic> 头文件中的 std::atomic 类模板提供的成员函数 compare_exchange_weak和 compare_exchange_strong来实现。 1. CAS 的核心逻辑 CAS 操作包含三个操作数: 内存值 (V):要更新的变量的值。预期原值 (E, Expected):线程认为该变量当前应该有的值(通常是之前读取的快照)。新值 (N, New):线程想要写入的新值。 原子操作流程如下,核心是比较、交换、重复: 比较:检查内存位置 V 的当前值是否等于预期值 E。交换(如果相等):如果相等 (V == E),说明在读取后没有其他线程修改过该变量,

By Ne0inhk
【C++算法刷题营地】—— 【string类面试题】Cyber顶级骇客带你速刷 C++ string类 中的常见算法题

【C++算法刷题营地】—— 【string类面试题】Cyber顶级骇客带你速刷 C++ string类 中的常见算法题

⚡ CYBER_PROFILE ⚡ /// SYSTEM READY /// [WARNING]: DETECTING HIGH ENERGY 🌊 🌉 🌊 心手合一 · 水到渠成 >>> ACCESS TERMINAL <<<[ 🦾 作者主页 ][ 🔥 C语言核心 ][ 💾 编程百度 ][ 📡 代码仓库 ] --------------------------------------- Running Process: 100% | Latency: 0ms 索引与导读 * 一、字符串转换 * 1)字符串转换整数 * 关键点拨 * 完整代码 * 最直接的替代接口:stoi * 小试牛刀:整数转字符串 * 2)字符串相加 * 关键点拨 * 完整代码 * 3)仅仅反转字母 * 关键点拨 * 完整代码 * 4)反转字符串 * 4.

By Ne0inhk
【C++:异常】C++ 异常处理完全指南:从理论到实践,深入理解栈展开与最佳实践

【C++:异常】C++ 异常处理完全指南:从理论到实践,深入理解栈展开与最佳实践

🎬 个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》 ⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平 🎬 艾莉丝的简介: 🎬 艾莉丝的C++专栏简介: 文章目录 * C++学习阶段的三个参考文档 * 1 ~> 异常的概念 * 2 ~> 异常的使用层 * 2.1 异常的抛出和捕获 * 2.2 栈展开 * 2.2.1 理论 * 2.2.2 最佳实践 * 2.3 查找匹配的处理代码 * 2.3.

By Ne0inhk