【发布时间】:2016-09-23 05:53:45
【问题描述】:
我正在尝试使用 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 表中有绝对路径)。
【问题讨论】:
-
哦...我想我知道问题出在哪里:如果主脚本不在子目录中,liquibase 无法找出“基本”目录。将所有内容更深入地移动(以便我的 master.xml 为 foo/master.xml),解决了问题。
-
你可以使用
${project.basedir}然后避免硬编码项目名称。 -
我想了解您是如何解决它的,“master.xml”和“baseline.xml”是否位于同一目录中? 'sql'文件夹的位置怎么样?你能提供目录结构吗?谢谢
-
我不想使用 project.basedir,因为这样做会使 databasechangelog 中的文件名是绝对的。你不想这样做,因为如果你从不同的目录运行你的 maven 构建,liquibase 会认为这是一个不同的变化。