liquibase-maven-plugin和sqlFile

时间:2016-05-25 14:34:47

标签: maven liquibase

我正在尝试使用liquibase-maven-plugin来运行我的数据库更新。我有以下插件配置:

<configuration>
    <username>${dba.username}</username>
    <password>${dba.password}</password>
    <url>${caesium.url}</url>
    <changeLogFile>master.xml</changeLogFile>
    <driver>org.postgresql.Driver</driver>
    <includeArtifact>true</includeArtifact>
</configuration>

我将数据库更改日志(和SQL)文件保存在src / main / resources中。我的变更集如下:

master.xml:

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
    <include file="baseline.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

baseline.xml:

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

    <changeSet id="base-roles" author="asdf" dbms="PostgreSQL">
        <sqlFile path="sql/some-file.sql" relativeToChangelogFile="true"/>
    </changeSet>
</databaseChangeLog>

some-file.sql是资源的sql子目录中指定的(因此,相对于更改日志, sql / some-file.sql)。

唉!上面的结构不起作用! liquibase无法找到sql文件。

奇怪的是,当我将主脚本设置为绝对路径时,一切正常。但是,这不是我想要做的(我不想在databasechangelog表中有绝对路径)。

1 个答案:

答案 0 :(得分:1)

我会回答我自己的问题以防其他人有类似的问题(从评论中我可以看到有人碰到了这个问题。)

问题在于:我将主脚本(更改文件)指向:<changeLogFile>master.xml</changeLogFile>。 Liquibase在classpath上发现它,但由于某种原因,无法弄清楚它在哪个目录中(我认为这只是一个错误)。

我的结构(一个没有工作的)是这样的:

src/main/resources master.xml baseline.xml sql somefile.sql

所有内容都有relativeToChangelogFile="true",因此如果liquibase找到master.xml,它应该能够找到其他所有内容。解决方法是将所有内容放在子目录中。这样的事情会做:

src/main/resources liquibase-bug-workaround master.xml baseline.xml sql somefile.sql

...并将插件配置更改为<changeLogFile>liquibase-bug-workaround/master.xml</changeLogFile>。不需要进行任何其他更改,一切正常。