Ошибка отката в будущем при использовании тега sqlFile: файл не найден - PullRequest
2 голосов
/ 10 февраля 2010

Я добавил тег будущего отката в мой скрипт. То, что я хочу сделать (и я думаю, что откат в будущем - это то, что я ищу), - это создать сценарий отката sql, но без его выполнения ( сценарий отката должен поставляться со сценариями sql - это требование моего клиент).

В моем файле журнала изменений есть много наборов изменений, некоторые из которых содержат тег <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>

Заранее спасибо.

1 Ответ

2 голосов
/ 11 февраля 2010

Возможно, проблема заключается в использовании абсолютного пути в вашем sqlFile, а не пути к пути к классам. Относительный путь classpath был тем, что изначально поддерживалось в liquibase и все еще лучше проверено. Параметр абсолютного пути был добавлен недавно, и код futureRollbackSql, возможно, не был исправлен для его поддержки.

Можете ли вы попробовать sqlFile, используя относительный путь?

В качестве примечания, опция относительного пути, как правило, лучше, поскольку имя файла используется в таблице базы данных changelog, чтобы указать, какие наборы изменений были запущены. Если вы используете абсолютный путь, весь путь сохраняется, и если вы попытаетесь повторно запустить журнал изменений с другого пути (или работать с той же базой данных с другого компьютера), liquibase решит, что это другой набор изменений, и попытается перезапустите его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...