liquibase futuro de erro de reversão com SQLFile tag: Arquivo não encontrado

StackOverflow https://stackoverflow.com/questions/2236912

  •  19-09-2019
  •  | 
  •  

Pergunta

Eu adicionei a tag futuro-reversão para o meu script ant. O que eu quero fazer (e eu acho que o futuro-rollback é que estou procurando) é gerar um script de reversão sql, mas sem executá-lo ( roteiro de reversão deve ser entregue com scripts SQL é a exigência de meu cliente).

Meu arquivo changelog tem muitos changesets, alguns dos quais contêm a tag <sqlFile>.

Por exemplo:

<databaseChangeLog ...>

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

</databaseChangelog...>

Quando o latest/somesqlprocedure.xml tem uma tag 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>

Quando eu executar o script ant, eu recebo o seguinte erro

liquibase.exception.ChangeLogParseException: Arquivo de Migração inválido: <sqlfile path=${changelog.dir}/latest/myprocedure.sql> - Não foi possível encontrar o arquivo

Alguém tem uma idéia do que está acontecendo?

Este é um trecho do arquivo 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>

Agradecemos antecipadamente.

Foi útil?

Solução

O problema pode estar vindo de usar um caminho absoluto em sua SQLFile, em vez de um caminho classpath-relativa. O caminho relativo classpath foi o que foi originalmente suportado no liquibase e ainda é melhor testado. A opção de caminho absoluto foi adicionado recentemente, eo código futureRollbackSql pode não ter sido corrigido para apoiá-lo.

Você pode tentar a SQLFile usando um caminho relativo?

Como uma nota lateral, a opção de caminho relativo é geralmente melhor porque o nome do arquivo é usado na tabela de databasechangelog a nota que changesets tem ran. Se você usar um caminho absoluto, todo o caminho é armazenado e se você tentar re-executar o changelog de um caminho diferente (ou correndo contra o mesmo banco de dados de uma máquina diferente), liquibase vai pensar que é um conjunto de alterações diferentes e tentar re-executá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top