Liquibase路径异常及Gradle依赖配置失败问题求助
问题分析与解决方案
第一种方法(直接引用文件路径)的错误原因
你用file:../project-database/db-migrations/changelog.xml时出现路径非法字符错误,是因为Liquibase对file:前缀的解析逻辑问题——它会把file:当成路径的一部分,导致识别到非法字符:。
解决这个问题的话,直接去掉file:前缀,用相对路径即可:
spring.liquibase.change-log=../project-database/db-migrations/changelog.xml
但这种方法有局限性,比如CI环境、打包运行时的工作目录可能和本地不一致,容易出现找不到文件的问题,更推荐用模块依赖的方式。
第二种方法(模块依赖)的错误点及修正
你之前的配置有三个核心问题:
- project-database的资源打包路径不对:你设置
srcDir 'db-migrations'后,变更日志会直接打包到JAR的根目录,而非project-database/db-migrations下,导致你写的路径找不到文件。 - 依赖范围未匹配测试场景:你没指定依赖的范围,默认是
implementation,测试阶段可能无法正确加载到project-database的资源。 - 类路径引用路径错误:因为资源实际打包位置和你预期的不一致,所以路径写法错误。
修正步骤
1. 调整project-database的build.gradle配置
确保变更日志打包后保留db-migrations目录结构,修改为:
sourceSets { main { resources { srcDir 'db-migrations' // 保留目录结构,将db-migrations下的文件打包到JAR的db-migrations目录 include '**/*.xml' } } } // 确保资源被正确打包进JAR jar { from sourceSets.main.resources }
2. 在project-web的build.gradle中添加测试依赖
因为是集成测试时需要,所以依赖范围设为testImplementation:
dependencies { // 其他依赖... testImplementation project(':project-database') }
同时确认根项目的settings.gradle已经包含所有模块:
include ':project-web', ':project-service', ':project-database'
3. 修改Liquibase的change-log参数
此时变更日志在类路径的db-migrations目录下,参数改为:
spring.liquibase.change-log=classpath:db-migrations/changelog.xml
这样配置后,project-web的集成测试就能正确加载project-database中的Liquibase变更日志,无需复制文件。
内容的提问来源于stack exchange,提问作者mackesmilian
相关产品推荐
相关产品推荐

