You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Spring Boot至2.4.X版本时Maven构建出现Java编译AssertionError

根因分析

这个报错是JDK 11早期版本的javac编译器已知BUG,结合Spring Boot 2.4+依赖管理规则变更、旧版maven-compiler-plugin对Java模块化(JPMS)的兼容性问题共同触发的:

  • Spring Boot 2.4+调整了默认依赖传递规则,会引入部分带模块化描述的jar包
  • 你当前使用的maven-compiler-plugin 3.8.0对JPMS模块的冲突处理逻辑有缺陷
  • JDK 11.0.12及更早版本的javac遇到不规范的模块依赖时,不会输出正常编译错误,而是直接抛出AssertionError崩溃

解决方案

按优先级依次尝试以下操作即可解决:

  1. 升级maven-compiler-plugin版本到3.8.1以上
    Spring Boot 2.4+的父POM默认管理的编译器插件版本高于3.8.0,你当前的版本是继承了旧配置导致的不匹配,在父POM的pluginManagement中指定版本即可:
<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
      </plugin>
    </plugins>
  </pluginManagement>
</build>
  1. 关闭不必要的模块检查(未使用JPMS的项目适用)
    如果你的项目没有编写module-info.java使用Java模块化功能,直接在编译器插件配置中增加参数关闭模块扫描:
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <compilerArgs>
      <arg>--limit-modules</arg>
      <arg>java.base</arg>
    </compilerArgs>
  </configuration>
</plugin>
  1. 排查依赖冲突
    执行mvn dependency:tree命令检查测试依赖路径下是否存在同一Jar包的多版本冲突,尤其是javax.annotation、javax.servlet这类公共依赖,排除掉多余的版本即可。

  2. 升级JDK小版本
    如果以上操作都无效,直接将JDK 11升级到11.0.16及以上版本,该版本已经修复了javac的这个断言崩溃BUG。

验证方法

可以先执行mvn clean test-compile -pl 后端模块名单独编译后端测试代码,确认问题解决后再全量构建,frontend-maven-plugin本身和Java编译阶段无关,不会触发该错误。

内容的提问来源于stack exchange,提问作者WorkingAccount

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:36:03