我正在尝试使用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表中有绝对路径)。
答案 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>
。不需要进行任何其他更改,一切正常。