liquibase ChangeLogParseException

9月 16, 2021 |

希望通过如下命令执行升级xxx.war中migration/changelogs.xml脚本
java liquibase.integration.commandline.Main --classpath=D:/workspace/xxx/target/xxx.war update

结果报如下错误
liquibase.exception.ChangeLogParseException: Error Reading Migration File: Found 19 files that match migration/changelogs.xml

原因分析:
是各个组开发的时候都提供了migration/changelogs.xml入库,而liquibase没有提供一个功能能将散落在各个jar中的migration/changelogs.xml包含进一个入口changelogs.xml中,不同的文件名也是可以的,因为底层查找文件使用的是ClassLoader.getResources()方法,要是一次调用返回多个url,liquibase就抛出异常了,

解决办法
通过JarFile查找到war包中包含migration/changelogs.xml的jar, 将每个jar传给liquibase单独执行
java liquibase.integration.commandline.Main --classpath=D:/workspace/xxx/target/xxx.jar update

顺便说一嘴
liquibase.integration.commandline.Main中绑定logback日志框架的做法我无法理解,但是将war中的每个jar抽取出来, 写到一个临时jar文件中, 然后通过URLClassLoader将这个抽取出来的jar 加入classLoader的做法还是打开新世界 ,为延后加载类提供了思路

Posted in: java基础

Comments are closed.