无法使用liquibase独立shell脚本

时间:2018-09-23 21:07:50

标签: java liquibase

(通过“问题/答案”分享我自己的解决方法)

liquibase-3.6.2-bin.tar.gz版本开始,尝试将liquibase作为独立的shell脚本运行时,出现以下错误:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: ch/qos/logback/core/filter/Filter
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
        at java.lang.Class.getMethod0(Class.java:3018)
        at java.lang.Class.getMethod(Class.java:1784)
        at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: ch.qos.logback.core.filter.Filter
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 7 more
█

在谷歌搜索并检查了liquibase shell脚本之后,我下载了这两个项目的jar:

然后我相对于./lib的居住地创建了一个liquibase目录,并将以下jar链接到其中:

  • logback-classic-1.2.3.jar
  • logback-core-1.2.3.jar
  • slf4j-api-1.7.25.jar
  • slf4j-simple-1.7.25.jar

完成这些步骤后,命令行liquibase开始工作。

我同意this thread中一位张贴者的观点,sinc目前很难将liquibase用作独立实用程序:

  

1)此版本缺少必需的库才能自足。    2)另外:Liquibase jar的包装应从使用lib /文件夹转换为具有所有必需条件的Uber jar   包括库。

在3.6.0中,同一问题似乎有一个bug report,但至少对我来说,在3.6.2中还没有得到解决。

2 个答案:

答案 0 :(得分:1)

在谷歌搜索并检查了liquibase shell脚本之后,我下载了这两个项目的jar:

然后我创建了一个相对于liquibase所在目录的./lib目录,并将以下jar链接到其中:

  • logback-classic-1.2.3.jar
  • logback-core-1.2.3.jar
  • slf4j-api-1.7.25.jar
  • slf4j-simple-1.7.25.jar

这些步骤之后,命令行liquibase起作用了。

我同意本主题中一位发帖人的观点,因为目前很难将liquibase用作独立实用程序:

  

1)此版本缺少必需的库才能自足。   2)另外:Liquibase罐子的包装应从   利用lib /文件夹成为具有所有必需库的Uber jar   包括在内。

3.6.0中似乎有一个针对同一问题的错误报告,但至少对我而言,在3.6.2中尚未得到修复。

答案 1 :(得分:0)

liquibase有依赖关系,这很正常。

您可以使用构建工具(又名maven或gradle)来构建uberjar或构建lib文件夹(包含所需的依赖项)。

此外,它允许您打包脚本脚本以从命令行以Zip格式启动数据库更新。