命令行运行Liquibase遇JNI错误及类缺失问题求助
你遇到的这个java.lang.NoClassDefFoundError: ch/qos/logback/core/filter/Filter错误,本质是Liquibase运行时找不到必需的Logback日志框架依赖类,而且你换了3.6.0和3.6.1版本都没解决,大概率是安装包完整性或者依赖缺失的问题。下面是具体的排查和解决步骤:
检查Liquibase安装包的完整性
官方发布的Liquibase二进制包(liquibase-x.x.x-bin.zip)里,必须包含一个lib目录,里面存放了所有运行需要的依赖jar包,其中就包括Logback相关的logback-core-*.jar和logback-classic-*.jar。你可以打开下载的压缩包或解压后的文件夹,看看lib目录里有没有这两个文件。如果没有,说明你下载的包不完整(可能是下载过程损坏,或者误下了非完整版本),建议重新下载对应版本的完整二进制包。手动补充缺失的依赖(如果包确实缺文件)
如果确认lib目录里没有Logback的jar包,可以单独下载兼容版本的文件放到lib目录下。针对Liquibase 3.6.x系列,推荐使用Logback 1.1.x版本(比如logback-core-1.1.11.jar和logback-classic-1.1.11.jar),这两个jar包是Liquibase 3.6版本默认依赖的,版本匹配才能避免类加载冲突。验证Java环境兼容性
Liquibase 3.6.x要求Java 8及以上版本运行,你可以在命令行执行java -version查看当前Java版本。如果使用的是Java 7或更低版本,会出现类加载异常;如果是过高的Java版本(比如Java 17+),也可能出现兼容性问题,建议切换到Java 8或Java 11来测试。重新测试命令
完成上述步骤后,回到命令行,运行.\liquibase --version来验证是否能正常启动。如果没有再抛出类缺失的错误,说明问题已经解决。
内容的提问来源于stack exchange,提问作者Mad Scientist

