2010-02-10 128 views
2

我已经将future-rollback标记添加到我的ant脚本。我想要做的事(我认为future-rollback是我在寻找的)是生成一个sql回滚脚本,但不执行它(回滚脚本必须与sql脚本一起交付是我的客户的要求)。liquibase未来回滚与sqlFile标记错误:找不到文件

我的更改日志文件有许多更改集,其中一些包含<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> 

提前感谢的一个片段。

回答

2

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

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

作为一个方面说明,相对路径选项通常更好,因为文件名用于数据库更改日志表中以指出哪些changeSets已经运行。如果使用绝对路径,则整个路径将被存储,如果尝试从其他路径重新运行更改日志(或者从不同的机器运行同一个数据库),liquibase会认为它是一个不同的changeSet,并尝试重新运行它。