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
相关产品推荐
相关产品推荐

