我使用2.0.5版本的Liquibase来测试数据库迁移。目前,如果我将changeLogFile
属性定义为updateDatabase
任务<updateDatabase changeLogFile="${changeLogFile}"
并且"${changeLogFile}"
在liquibase.properties
中指定为changeLogFile=com/db/master.changelog.xml
,则文件{ {1}}将不找到。
我使用Eclispe和ant standalone开始了一项蚂蚁任务。
所以我对master.changelog.xml
使用了以下修复:
${basedir}/**src**/
但如果没有这么脏的解决方案,我会非常高兴。
我尝试使用/ bin-directory
指定XML文件的类路径<updateDatabase changeLogFile="${basedir}/src/${changeLogFile}"
但是发生了很多异常,所以我注释掉了这个块。
我做错了什么?
<fileset dir="bin"> <include name="**/*.xml" /> </fileset>
文件包含:
liquibase.properties
changeLogFile=com/db/master.changelog.xml
driver=org.h2.Driver
url=jdbc:h2:tcp://localhost/testhiberliq
username=sa
password=
#for diff between two databases
baseUrl=jdbc:h2:tcp://localhost/testhiberliq
baseUsername=sa
basePassword=
dropFirst=false
tag=version 1.4
outputFile=outputFile.xml
outputDiffFile=outputFile.txt
(用作NewFile1.xml
):
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="liquibase-sample">
<property file="liquibase.properties" />
<path id="lib.path">
<fileset dir="lib">
<include name="**/*.jar" />
</fileset>
<!-- <fileset dir="bin">
<include name="**/*.xml" />
</fileset> -->
</path>
<taskdef resource="liquibasetasks.properties">
<classpath refid="lib.path" />
</taskdef>
<target name="update-database">
<!-- <taskdef name="updateDatabase"
classpathref="lib.path" />-->
<updateDatabase changeLogFile="${basedir}/src/${changeLogFile}" driver="${driver}" url="${url}" username="${username}" password="${password}" dropFirst="${dropfirst}" classpathref="lib.path" />
</target>
</project>
:
master.changelog.xml
目录树:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<include file="changelog/included.changelog.xml" relativeToChangelogFile="true"/>
<include file="changelog/included2.changelog.xml" relativeToChangelogFile="true"/>
<include file="changelog/included3.changelog.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>
答案 0 :(得分:0)
该任务将从类路径中检索更改日志文件。您需要将运行时根目录添加到路径中,如下所示:
<path id="lib.path">
..
..
<pathelement location="bin"/>
</path>
并按如下方式更改任务:
<updateDatabase changeLogFile="com/db/master.changelog.xml" ...
主更改日志文件还需要个人更改文件的完整路径:
<databaseChangeLog ..
<include file="com/db/changelog/included.changelog.xml"/>
<include file="com/db/changelog/included2.changelog.xml"/>
<include file="com/db/changelog/included3.changelog.xml"/>
</databaseChangeLog>
在运行时,liquibase会查看本地目录或类路径中列出的jar和目录。
为什么这么复杂?此方法可以将changelog文件打包为jar存档,可以单独或与代码一起打包。非常有用。