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

SpringBoot3+MyBatis+JDK17项目java -jar启动失败问题

问题

基于Spring Boot 3.1.5、MyBatis 3.0.3和JDK17的项目,本地IDE运行正常,执行mvn spring-boot:run启动也无异常,但用java -jar myjar.jar启动时,MyBatis映射文件解析报错,提示结果映射集合存在重复键,可jar包中仅包含一份该映射XML文件。

依赖配置

<parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>3.1.5</version>
</parent>

<dependency>
 <groupId>org.mybatis.spring.boot</groupId>
 <artifactId>mybatis-spring-boot-starter</artifactId>
 <version>3.0.3</version>
</dependency>

报错信息

Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'URL [jar:file:C:\Development\workspaces\sts\myapp\target\myjar-1.0.0-SNAPSHOT.jar!/BOOT-INF/classes/mybatis/mappers/Order.xml]'. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains key myapp.repotracer.mapper.OrderMapper.mapper_resultMap[orderResultMap]_collection[sfcs]
排查与解决方向
  • 验证jar包内资源唯一性:执行jar tf myjar.jar命令列出jar中所有文件,确认mybatis/mappers/Order.xml是否只存在一份。部分场景下打包插件会将不同目录下的同名资源都纳入jar包,比如多模块项目中其他模块的资源目录。
  • 修正Mapper扫描路径配置:检查Spring Boot配置中的mybatis.mapper-locations,如果配置为classpath*:mybatis/mappers/*.xml,classpath*会扫描所有classpath下的匹配文件(包括依赖jar中的),改为classpath:mybatis/mappers/*.xml(去掉前缀的星号),限制仅扫描当前项目的资源。
  • 检查ResultMap定义:仔细核对Order.xml中的orderResultMap,确认是否存在重复定义的ResultMap,或者嵌套的sfcs集合是否有重复绑定的情况。IDE可能会忽略一些语法细节,但打包后的解析校验更严格。
  • 清理打包缓存:执行mvn clean package重新打包,避免target目录中残留的旧文件导致资源重复。
  • 升级依赖版本:尝试将MyBatis Spring Boot Starter升级至最新稳定版(如3.0.5),排查是否为版本兼容性问题导致的解析异常。

内容的提问来源于stack exchange,提问作者Davide D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 23:47:12