我目前正致力于将liquibase更改应用于数据库。 我希望能够处理从liquibase updateDatabase任务中获取的错误。以下是我现在在构建文件中的内容(请记住我现在的工作正常,我只需要能够处理运行liquibase时可能遇到的错误)。
<target name="update_db" depends="prepare">
<taskdef resource="liquibasetasks.properties">
<classpath refid="classpath"/>
</taskdef>
<updateDatabase
changeLogFile="${db.changelog.file}"
driver="${database.driver}"
url="jdbc:mysql://localhost/${db.name}"
username="${user}"
password="${password}"
promptOnNonLocalDatabase="not local database"
dropFirst="false"
classpathref="classpath"
/>
</target>
目前,当我收到错误时,我会得到类似的内容(从我创建的情况来演示):
BUILD FAILED
MYPATH\build.xml:15: The following error occurred while executing this line:
MYPATH\\build.xml:117: liquibase.exception.MigrationFailedException: Migration failed
for change set PATH/2.20.9/tables.xml::FFP-1384::AUSER:
Reason: liquibase.exception.DatabaseException: Error executing SQL ALTER TABLE
test.widget ADD full_screen BIT(1) DEFAULT 0: Duplicate column name 'full_screen'
.............. and a the wall of text continues
理想情况下,我希望能够从liquibase获取返回代码(而不是这个文本块)到ant中,然后根据它执行以下操作:
<echo message="this failed because ${reason}"/>
但不限于此。
我有办法从liquibase获取返回码吗?我最好的猜测是类似于ant exec任务,默认情况下返回代码被忽略,我希望有一些方法可以让我得到它。欢迎任何建议。
编辑:模糊的问题https://stackoverflow.com/questions/17856564/liquibase-3-0-2-logging-to-error-console
答案 0 :(得分:0)
ant contrib trycatch任务使我能够处理错误,这被证明是一个合适的修复,因为无论如何堆栈跟踪实际上都很有用。
http://ant-contrib.sourceforge.net/tasks/tasks/trycatch.html
<trycatch property="foo" reference="bar">
<try>
<fail>Tada!</fail>
</try>
<catch>
<echo>In <catch>.</echo>
</catch>
<finally>
<echo>In <finally>.</echo>
</finally>
</trycatch>
您需要下载ant contrib jar,如果您不想将它放在ANT_HOME中,那么您可以使用
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="PATH TO JAR"/>
</classpath>
</taskdef>