使用sqlFile标记liquibase将来的回滚错误:找不到文件

时间:2010-02-10 13:02:05

标签: rollback liquibase

我已将future-rollback标记添加到我的ant脚本中。我想要做的(我认为未来回滚是我正在寻找的)是生成一个sql回滚脚本,但没有执行它(回滚脚本必须与sql脚本一起提供是从我的客户)。

我的更改日志文件有许多更改集,其中一些包含<sqlFile>标记。

例如:

  

<databaseChangeLog ...>

     

<include file="latest/somesqlprocedure.xml" relativeToChangelogFile="true"/>

     

</databaseChangelog...>

latest/somesqlprocedure.xmlsqlFile标记的位置。

  

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

     

     

<sqlFile path="${changelog.dir}/latest/myprocedure.sql" splitStatements="false" />

     

</changeSet>

     

</databaseChangeLog>

当我运行ant脚本时,我收到以下错误

  

liquibase.exception.ChangeLogParseException:   无效的迁移文件:<sqlfile path=${changelog.dir}/latest/myprocedure.sql>    - 找不到文件

有没有人知道最新情况?

这是build.xml文件的片段

<target name="db-future-rollback" depends="init">
        <rollbackFutureDatabase
                    changeLogFile="${db.changelog.file}"
                    driver="${database.driver}"
                    url="${database.url}"
                    username="${database.username}"
                    password="${database.password}"
                    outputfile="${database.rollback.dir}"
                    promptOnNonLocalDatabase="${prompt.user.if.not.local.database}"
                    classpathref="project.classpath"
                    >
            </rollbackFutureDatabase>

    </target>

提前致谢。

1 个答案:

答案 0 :(得分:2)

问题可能来自于在sqlFile中使用绝对路径,而不是类路径相对路径。类路径相对路径是liquibase最初支持的,并且仍然经过了更好的测试。最近添加了绝对路径选项,而futureRollbackSql代码可能尚未修补以支持它。

您可以使用相对路径尝试sqlFile吗?

作为旁注,相对路径选项通常更好,因为在databasechangelog表中使用文件名来记录运行了哪些changeSet。如果使用绝对路径,则存储整个路径,如果您尝试从不同的路径重新运行更改日志(或从不同的计算机运行相同的数据库),liquibase会认为它是一个不同的changeSet并尝试重新运行它。