设置Liquibase Java在类路径/jar之外使用变更日志



我在一个项目中使用Liquibase与Maven - v4.2.0。

我的变更日志在文件系统中,而不是在项目的JAR或类路径中。

我用下面的语句来建立我的对象:

liquibase = new Liquibase( changeLogFile, new FileSystemResourceAccessor(), database );

其中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.

我尝试了各种方法,包括file:前缀,问题文件可以直接在终端中打开。
我看过代码,我对FileSystemResourceAccessor被命名为这样的概念感到困惑,如果它只能使用类路径(已经有ClassLoaderResourceAccessor),但我看不到让它工作的方法。

基于非常非常老的问题,人们以前已经解决了这个问题,但我想在4.0之前?

有人有什么建议吗?我已经使用了CLI liquidbase并理解了错误,但我不确定如何在没有绝对路径的情况下not确定路径,因为这可能会在任意位置的几台不同的机器上运行。

这可能是一个利基问题,但是提前感谢您的帮助。

这是我最终做的(基于gradle的项目):

  • 强制外部位置实际上是类路径
  • 的一部分。
  • 将XSD位置更改为完整的URL(显然,liquidbase有足够的智能,不从在线位置获取,而是从与分发JAR捆绑的XSD文件的缓存中加载)。

对于gradle来说,这意味着添加一些东西来构建。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)
}

changelog schemaLocation属性如下所示:

xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.11.xsd"

记住根据你的版本进行调整,

我的具体问题是测试。对于实际环境,liquibase脚本通过外部(基于liquibase的)工具应用于数据库。

我想对将脚本放在classpath/jar之外做出反应. 我四处看了看,因为我们也想这样做。

从我的角度来看,我会说这不是一个好方法,因为任何人都可以去脚本的位置并触摸这些可能导致Liquibase失败的文件。除了你可以把任何脚本放到那个位置并修改数据库。

我想Liquibase的作者知道为什么没有直接的方法来做到这一点。

最新更新