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

使用Java 11编译Java 8 Maven多模块项目时MyBatis测试运行失败

根因分析

你配置的<release>8参数仅作用于编译阶段,只能保证编译器输出兼容Java 8的字节码、并检查代码对Java 8标准库API的调用合法性,但不会改变Maven测试阶段的运行时环境:执行mvn test时实际使用的是你本地安装的OpenJDK 11运行时。
本次报错是当前项目使用的MyBatis版本内嵌的javassist版本过低,未适配Java 9+引入的模块系统,在生成懒加载代理、通过反射操作类访问权限时触发空指针。

解决方案

你可以根据项目实际情况选择以下任意一种方案:

  • 方案1:升级MyBatis相关依赖到适配高版本JDK的版本
    将mybatis核心包升级到3.5.0及以上版本,mybatis-spring包升级到2.0.0及以上版本,这两个版本起已经更新了内嵌的javassist组件,兼容Java 11运行时。
  • 方案2:手动覆盖javassist依赖版本
    若暂时不方便升级MyBatis,可以在父pom.xml的依赖管理中手动引入高版本独立javassist,覆盖MyBatis内嵌的旧版本:
    <dependency>
        <groupId>org.javassist</groupId>
        <artifactId>javassist</artifactId>
        <version>3.29.2-GA</version>
    </dependency>
    
  • 方案3:测试阶段切换为Java 8运行时
    若需要完全对齐Java 8的运行效果,可以在执行mvn test时指定JAVA_HOME为本地Java 8的安装路径,或者给maven-surefire-plugin配置指定Jdk路径,让测试阶段用Java 8运行,彻底规避高版本JDK的兼容性问题。

说明:前两种方案不会改变编译输出的Java 8兼容性,仅修复了代码在Java 11运行时的兼容问题,不影响后续项目升级流程。

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

相关产品推荐
方舟 Agent Plan

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

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