2010-02-10 4 views
2

J'ai ajouté la balise future-rollback à mon script ant. Qu'est-ce que je veux faire (et je pense que future-rollback est ce que je cherche) est de générer un script de restauration SQL, mais sans l'exécuter (script de restauration doit être livré avec des scripts SQL est l'exigence de mon client).Erreur de restauration future de liquibase avec la balise sqlFile: Fichier non trouvé

Mon fichier changelog contient de nombreuses modifications, dont certaines contiennent la balise <sqlFile>.

Par exemple:

<databaseChangeLog ...>

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

</databaseChangelog...>

Lorsque le latest/somesqlprocedure.xml a une balise 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>

Quand je lance le script fourmi, je reçois le erreur suivant

liquibase.exception.ChangeLogParseException: Fichier Migration non valide: <sqlfile path=${changelog.dir}/latest/myprocedure.sql> - Impossible de trouver le fichier

Est-ce que quelqu'un a une idée de ce qui se passe?

C'est un extrait du fichier 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> 

de Merci à l'avance.

Répondre

2

Le problème peut provenir de l'utilisation d'un chemin absolu dans votre fichier sql plutôt que d'un chemin relatif au chemin de classe. Le chemin relatif du classpath était ce qui était initialement supporté par la liquibase et il est encore mieux testé. L'option de chemin absolu a été ajoutée récemment et le code de futureRollbackSql n'a peut-être pas été corrigé pour le prendre en charge.

Pouvez-vous essayer le sqlFile en utilisant un chemin relatif?

En remarque, l'option de chemin relatif est généralement meilleure car le nom de fichier est utilisé dans la table databasechangelog pour indiquer quels changements ont été exécutés. Si vous utilisez un chemin absolu, le chemin entier est stocké et si vous essayez de réexécuter le journal des modifications à partir d'un chemin différent (ou si vous exécutez sur la même base de données à partir d'une autre machine), liquibase pense qu'il est différent. réexécutez-le.

Questions connexes