project
|___project-web
|___project-service
|___project-database
project-web 是一个 Spring Boot 项目,应用程序类所在。 Project-database 不是一个 Spring Boot 项目,而是包含一个 build.gradle 和我们的 liquibase 变更日志。现在,在project-web 中,我有需要运行 liquibase 变更日志的集成测试。当我将更改日志复制到 project-web/src/test/resources
并将更改日志参数设置为
change-log: classpath:db/db-migrations/changelog.xml
时,这将按预期工作。但是,出于显而易见的原因,我想避免复制已经存在于项目中的chanelog。为此,我尝试将更改日志参数设置为
change-log: file:../project-database/db-migrations/changelog.xml
,这会导致此异常:
java.nio.file.InvalidPathException: Illegal char <:> at index 4: file:../project-database/db-migrations/v2024.07.1/2024.07.16-initial.xml
。所以路径本身是正确的,liquibase 可以找到这些文件,但它会失败并出现上述异常,除非我将相同的文件复制到我的
test/resources
文件夹中。我还尝试任意更改更改日志文件的顺序以查看它是否是一个文件,但例外情况始终完全相同。编辑:我不是 100% 确定我做对了,但我尝试遵循 Nikos 的建议: 在项目数据库的 build.gradle 中我添加了:
sourceSets {
main {
resources {
srcDir 'db-migrations'
}
}}
然后我在project-web中添加了对project-database的依赖,并将liquibase参数更改为change-log: classpath:project-database/db-migrations/changelog.xml
。但是,这不起作用,测试失败并显示
Caused by: liquibase.exception.ChangeLogParseException: ERROR: The file 'classpath:project-database/db-migrations/changelog.xml' was not found.
# Enter the path for your changelog file.
changeLogFile=src/main/resources/db/changelog-master.yaml
这会让 liquibase 知道在哪里可以找到该文件。如果您不提供此信息,它将在项目的资源文件夹中查找