我在CentOS 6.9上安装了Java:
[root@sample liquibase-3.6.2-bin.z]# java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
然后我尝试运行liquibase.jar,但出现此错误:
[root@sample liquibase-3.6.2-bin.z]# ll
total 11368
drwxrwxrwx. 2 db2inst1 db2iadm1 4096 Dec 17 13:10 lib
-rwxrwxrwx. 1 db2inst1 db2iadm1 11358 Jul 3 23:27 LICENSE.txt
-rwxrwxrwx. 1 db2inst1 db2iadm1 1251 Jul 3 23:27 liquibase
-rwxrwxrwx. 1 db2inst1 db2iadm1 884 Jul 3 23:27 liquibase.bat
-rwxrwxrwx. 1 db2inst1 db2iadm1 2167086 Jul 3 23:30 liquibase.jar
-rwxrwxrwx. 1 db2inst1 db2iadm1 7174 Jul 3 23:27 liquibase.spec
-rwxrwxrwx. 1 db2inst1 db2iadm1 3046 Jul 3 23:27 README.txt
drwxrwxrwx. 6 db2inst1 db2iadm1 4096 Dec 17 13:10 sdk
[root@sample liquibase-3.6.2-bin.z]# java -jar liquibase.jar
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:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more
[root@sampleliquibase-3.6.2-bin.z]#
我该怎么办?我缺少什么吗?如何找到这些课程?
答案 0 :(得分:1)
该错误是常规的缺少类错误,而不是JNI错误。该错误具有误导性,因为它表明问题的来源不正确。
这些类在lib/
目录中。有一个用于启动它的dos bat文件。 Unix上的等效内容是这样的:
#!/bin/bash -p
for main in liquibase*.jar; do
cp=$main
done
for i in lib/*.jar; do
[[ -f $i ]] && cp=$cp:$i
done
java -classpath $cp liquibase.integration.commandline.Main "$@"
但是,这会产生错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
表示另一个缺少的库-Java的简单日志记录。
要解决此问题。您需要slf4j的副本。下载latest binary zip,然后提取api文件-将其称为sl4j-api-<version>.jar
到liquibase的lib
目录中,应该可以使您更进一步。