我在我的 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]#
我该怎么办?我错过了什么吗?如何找到这些类(class)?
最佳答案
该错误是一般类缺失错误,而不是 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
进入lib
liquibase 的目录应该能让你更进一步。
关于java - centos上liquibase安装,JNI报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53814853/