Liquibase:java.nio.file.InvalidPathException:不在类路径中时索引处存在非法字符<:>

问题描述 投票:0回答:1
我的项目结构如下:

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.


我做错了什么吗?

java spring-boot liquibase
1个回答
0
投票
您可以在项目级别添加 liquibase.properties 文件,然后在其中定义更改日志文件,如下所示:

# Enter the path for your changelog file. changeLogFile=src/main/resources/db/changelog-master.yaml
这会让 liquibase 知道在哪里可以找到该文件。如果您不提供此信息,它将在项目的资源文件夹中查找

© www.soinside.com 2019 - 2024. All rights reserved.