我在项目 v4.2.0 中使用 Liquibase 和 Maven。
我的更改日志位于文件系统上,而不是项目的 JAR 或类路径中。
我使用以下内容来建立我的对象:
liquibase = new Liquibase( changeLogFile, new FileSystemResourceAccessor(), database );
Run Code Online (Sandbox Code Playgroud)
那里changelogFile是类似的东西~/liquibase-sql/changelog/db.changelog.xml
当我调用 时liquibase.validate(),在提醒类路径位置后,我得到以下信息:
Specifying files by absolute path was removed in Liquibase 4.0. Please use a relative path or add '/' to the classpath parameter.
Run Code Online (Sandbox Code Playgroud)
我已经尝试了各种方法,包括file:前缀,并且问题文件可以直接在终端中打开。
我查看了代码,FileSystemResourceAccessor如果它只能使用类路径(已经有一个ClassLoaderResourceAccessor),我对这样命名的概念感到困惑,但我看不到让它工作的方法。
基于非常非常古老的问题,人们以前已经解决过这个问题,但我假设在 4.0 之前?(这在 3.10.3 上运行良好)
有人有任何指点吗?我已经使用了 CLI liquibase 并理解了错误,但我不确定如何在没有绝对路径的情况下无法确定路径,因为我知道这可能会在任意位置的几台不同机器上运行。
这可能是一个小问题,但提前感谢您的帮助。
这是我最终所做的(对于基于 gradle 的项目):
对于 gradle,这意味着向 build.gradle 添加一些内容,如下所示:
sourceSets {
test {
//whatever else you have
resources {
srcDir 'src/test/resources'
srcDir 'top-external-folder-of-changelog'
}
}
}
dependencies {
testImplementation files (path/to/external/folder)
}
Run Code Online (Sandbox Code Playgroud)
变更日志 schemaLocation 属性如下所示:
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.11.xsd"
Run Code Online (Sandbox Code Playgroud)
请记住根据您的版本进行调整,
我的具体问题是测试。对于真实环境,liquibase 脚本通过外部(基于 liquibase)工具应用于数据库。
| 归档时间: |
|
| 查看次数: |
2857 次 |
| 最近记录: |