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

Spring Boot集成测试无法找到Liquibase类路径资源问题求助

解决Spring Boot集成测试中Liquibase变更日志找不到的问题

老哥,我之前也踩过一模一样的坑,这问题核心是源码环境和Jar包环境的资源路径差异导致的,给你拆解下:

问题根源

你在DAL单元测试里用的liquibase: change-log: classpath:src/changeLogs/db-changelog-master.xml是指向本地源码目录的路径,但当DAL项目被打包成Jar后,src这个源码目录并不会被包含在Jar里——Maven/Gradle打包时,只会把src/main/resources下的资源复制到Jar的classpath根目录。

DAL单元测试直接在源码环境运行,能访问到src下的文件,所以没问题;但集成测试依赖的是打包后的Jar包,Jar里根本没有src/这个层级,自然找不到对应的资源。

解决方案

1. 调整资源文件目录结构

确保你的变更日志文件放在DAL项目的src/main/resources/changeLogs目录下,这样打包后,这些文件会被直接放到Jar的classpath根目录下的changeLogs文件夹里。

2. 修改Liquibase配置路径

把所有测试环境(包括DAL单元测试和集成测试)的application.yml里的配置改成:

liquibase:
  change-log: classpath:changeLogs/db-changelog-master.xml

去掉前面的src/,这样不管是在源码环境运行单元测试,还是依赖Jar包运行集成测试,都能通过classpath正确定位到变更日志文件。

3. 额外检查点

  • 如果你的主变更日志里引用了子变更文件,确保引用路径是相对classpath的,比如:
    <!-- 主文件在changeLogs目录下,引用同目录的子文件 -->
    <include file="sub-changelog.xml"/>
    <!-- 或者明确classpath路径 -->
    <include file="classpath:changeLogs/sub-changelog.xml"/>
    
  • 确认你的构建工具(Maven/Gradle)没有排除changeLogs目录下的文件,默认配置下src/main/resources下的所有内容都会被打包,除非你自定义了排除规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:08:00