在离线模式下使用Liquibase为空数据库生成更改日志

时间:2017-08-10 17:00:27

标签: java postgresql ant liquibase

正如标题所说,我想使用Liquibase在离线模式下为空数据库生成更改日志。我的ant文件如下所示:

<project xmlns:liquibase="antlib:liquibase.integration.ant">

<taskdef resource="liquibase/integration/ant/antlib.xml" uri="antlib:liquibase.integration.ant">
    <classpath>
        <pathelement location="antlibs/liquibase-core-3.5.3.jar" />
        <pathelement location="antlibs/snakeyaml-1.18.jar" />
    </classpath>
</taskdef>

<target name="generate-changelog">
    <liquibase:generateChangeLog>
        <liquibase:database url="offline:postgresql?snapshot=snapshot.json" />
        <liquibase:xml outputfile="target/changelog.xml" encoding="UTF-8" />
    </liquibase:generateChangeLog>
</target>

后来我想添加Liquibase-Hibernate4来从我的实体生成更改日志,但我事先遇到了各种问题。如果我只是使用url&#34; offline:postgresql&#34;,则ant任务会因NullPointerException而崩溃,因为Liquibase试图克隆不可用的快照。如果我添加&#34;?snapshot = snapshot.json&#34;,Liquibase(或Yaml)无法找到我的文件。

我的问题:

  • 当我只想为我的实体创建更改日志而没有任何基本快照时,这是正确的方法吗?
  • 是否有更简单的方法为liquibase提供空数据库作为基础?
  • 如何将snapshot.json添加到项目中以确保ant任务可以找到它?

1 个答案:

答案 0 :(得分:0)

与此同时,我能够找到一些东西:

  • 要确保任务可以找到snapshot.json,必须将其放入jar文件并将jar文件添加到任务的类路径中。
  • 它似乎不是Hibernate扩展的正确方法,因为似乎Hibernate扩展不适用于脱机URL。
  • 根据https://liquibase.jira.com/browse/CORE-2183,可能的解决方法是使用空的H2数据库作为生成初始JPA更改日志的基础。