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

问题描述 投票:0回答:3

我在项目中使用 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 之前? (这在 3.10.3 上运行良好)

有人指点一下吗?我已经使用了 CLI liquibase 并理解了错误,但我不确定如何在不绝对的情况下确定路径,因为我知道这可能会在任意位置的几台不同机器上运行。 这可能是一个小众问题,但提前感谢您的帮助。

liquibase
3个回答
3
投票

强制外部位置实际上成为类路径的一部分
  • 将 XSD 位置更改为完整 URL(显然 liquibase 有足够的智能,不会从在线位置获取该位置,而是从与分发 JAR 捆绑在一起的 XSD 文件的缓存中加载。
  • 对于 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) }

变更日志 schemaLocation 属性如下所示:

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

记得调整您的版本,

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


0
投票
将脚本放在类路径/jar之外

做出反应。我环顾四周,因为我们也想这样做。 从我的角度来看,我想说这不是一个好方法,因为任何人都可以访问脚本的位置并触摸这些文件,这可能会导致 Liquibase 失败。除了您可以将任何脚本放入该位置并修改数据库之外。

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


0
投票

val database = DatabaseFactory.getInstance() .findCorrectDatabaseImplementation( new JdbcConnection( DriverManager.getConnection( jdbcUrl, getPostgresContainerConfig().username(), getPostgresContainerConfig().password()))); new liquibase.Liquibase( "analytics/target/classes/create_db.sql", new FileSystemResourceAccessor( new File("/Users/debrajmanna/code/java/github/sp/src/java/")), database);

我的文件位于 
/Users/debrajmanna/code/java/github/sp/src/java/analytics/target/classes/create_db.sql

    

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