2016-05-25 9 views
0

データベースの更新を実行するためにliquibase-maven-pluginを使用しようとしています。liquibase-maven-pluginとsqlFile

<configuration> 
    <username>${dba.username}</username> 
    <password>${dba.password}</password> 
    <url>${caesium.url}</url> 
    <changeLogFile>master.xml</changeLogFile> 
    <driver>org.postgresql.Driver</driver> 
    <includeArtifact>true</includeArtifact> 
</configuration> 

私のデータベースの変更履歴(およびSQL)ファイルはsrc/main/resourcesに保存されています。私のチェンジセットは以下の通りです:

master.xml:

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> 
    <include file="baseline.xml" relativeToChangelogFile="true"/> 
</databaseChangeLog> 

baseline.xml:

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> 

    <changeSet id="base-roles" author="asdf" dbms="PostgreSQL"> 
     <sqlFile path="sql/some-file.sql" relativeToChangelogFile="true"/> 
    </changeSet> 
</databaseChangeLog> 

一部-file.sqlなので、リソースのSQLサブディレクトリ(に指定されているように、変更ログに対して、 sql/some-file.sqlです。

アラス!上記の構文はうまくいきません! liquibaseによってsqlファイルが見つかりません。

私が絶対パスにメインスクリプトを設定すると、不思議にも、すべて正常に機能します。しかし、それは私がやりたいことではありません(私はdatabasechangelogテーブルに絶対パスを入れたくありません)。

+0

オハイオ州...私は問題が何であるか知っていると思います。メインスクリプトがサブディレクトリにない場合、liquibaseは 'base'ディレクトリを見つけることができません。すべてを一歩進めて(master.xmlがfoo/master.xmlになるように)、問題を修正します。 – ishi

+0

'$ {project.basedir}'を利用して、プロジェクトの名前をハードコーディングするのを避けることができます。 – Tunaki

+0

「master.xml」と「baseline.xml」は同じディレクトリにありますか?どうやって 'sql'フォルダの場所ですか?あなたはディレクトリ構造を提供することができますか?ありがとう – Thracian

答えて

1

誰か他の人が同じような問題を抱えている場合には、自分の質問に答えるつもりです(コメントから、誰かがこれにぶつかることがわかります)。

私の主なスクリプト(変更ファイル)には、<changeLogFile>master.xml</changeLogFile>と指摘しました。 Liquibaseはclasspathでそれを見つけましたが、何らかの理由でどのディレクトリにあるのか分からなくなっていました(これは単なるバグだと思います)。

マイ構造(動作しませんでした1)が、このようなものだった:

src/main/resources master.xml baseline.xml sql somefile.sql

すべてがrelativeToChangelogFile="true"を持っていたので、LiquiBaseをがmaster.xmlを見つけた場合、他のすべてを見つけることができるはずです。回避策は、すべてをサブディレクトリに配置することです。

src/main/resources liquibase-bug-workaround master.xml baseline.xml sql somefile.sql

を...と<changeLogFile>liquibase-bug-workaround/master.xml</changeLogFile>にプラグインの設定を変更します。このような何かを行います。それ以外の変更は必要ありません。

関連する問題