SQLFILEタグと将来のロールバックエラーLiquiBaseを:ファイルが見つかりません
質問
私は私のAntスクリプトに、将来のロールバックタグを追加しました。私は(と私は将来、ロールバックはイムが探して何だと思う)やりたいことは、SQLロールバックスクリプトを生成することですが、それを実行せず(のスクリプトは、SQLスクリプトを使用して送達されなければならないロールバックはからの要求であります私のクライアント)。
私のchangelogファイルは<sqlFile>
タグが含まれているそのうちのいくつかは、多くのチェンジセットを、持っています。
例
<databaseChangeLog ...>
<include file="latest/somesqlprocedure.xml" relativeToChangelogFile="true"/>
</databaseChangelog...>
latest/somesqlprocedure.xml
がsqlFile
タグを有する場合ます。
<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>
事前に感謝します。
解決
問題は、あなたのSQLFILE絶対パスではなく、クラスパス、相対パスを使用してから来ることができます。クラスパスの相対パスは、もともとLiquiBaseをでサポートされていましたし、まだ良いテストされたものでした。絶対パスオプションが最近追加された、とfutureRollbackSqlコードは、それをサポートするためのパッチが適用されていない可能性があります。
あなたは相対パスを使用してSQLFILEを試すことはできますか?
ファイル名が走っているチェンジに注意することがdatabasechangelogテーブルで使用されているので、サイドノートとして、相対パスオプションは、一般的に良好です。あなたは絶対パスを使用する場合は、パス全体が格納され、あなたがしようとした場合、別のパスからの変更履歴を再実行します(または別のマシンから同じデータベースに対して実行されている)、LiquiBaseを、それが異なるチェンジだと思うし、しようとしますそれを再実行します。