2016-05-25 27 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)。

唉!上述構造不起作用! sql文件不能被liquibase找到。

奇怪的是,當我將主腳本設置爲絕對路徑時,一切正常。但是,這不是我想要做的(我不想在數據庫更改日誌表中擁有絕對路徑)。

+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在類路徑中找到它,但由於某種原因,無法弄清楚它在哪個目錄下(我認爲這只是一個錯誤)。

我的結構(一個沒有工作)是這樣的:

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>。沒有其他需要改變,一切都按原樣運作。

相關問題