2010-02-10 59 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,並嘗試重新運行它。