使用docker openjdk:8运行java程序时,如何解决JNI错误:java.lang.NoClassDefFoundError:?

使用docker openjdk:8运行java程序时,如何解决JNI错误:java.lang.NoClassDefFoundError:?,java,docker,noclassdeffounderror,Java,Docker,Noclassdeffounderror,使用docker openjdk:8运行java程序时,如何解决JNI错误:java.lang.NoClassDefFoundError:twitter4j/TwitterException 我的Dockerfile: FROM openjdk:8 ADD dist/TwitterData.jar TwitterData.jar ENV CLASSPATH .:.twitter4j.jar ENTRYPOINT ["java","-jar","TwitterData.jar"] 错误显示:

使用docker openjdk:8运行java程序时,如何解决JNI错误:java.lang.NoClassDefFoundError:twitter4j/TwitterException

我的Dockerfile:

FROM openjdk:8
ADD dist/TwitterData.jar TwitterData.jar  
ENV CLASSPATH .:.twitter4j.jar
ENTRYPOINT ["java","-jar","TwitterData.jar"]
错误显示:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: twitter4j/TwitterException
    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: twitter4j.TwitterException
    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)

为了解决这个错误,我进入了图像的外壳并手动添加了路径变量,之后效果很好

您复制了主二进制文件,但是否复制了
twitter4j
依赖项?当我构建项目以获取jar时,我添加了依赖项并构建jar。我应该在dockerfile中使用copy命令吗?从NoClassDef错误中,似乎没有将
twitter4j
复制到导出中。您是如何构建TwitterData.jar的?或者尝试破坏构建并验证依赖项是否已实际导出,或者是的,显式复制依赖项。我使用IDE(Netbeans)来构建它。我从projectproperties选项中添加了依赖项,然后确保单击compressjarfile选项。我在dockerfile中添加了
COPY dist/lib/twitter4j-core-4.0.4.jar twitter4j-core-4.0.4.jar
,但得到了相同的错误。当显式复制时,请确保类路径也正确。在这种情况下,它应该以全名引用文件,如
twitter4j.jar
!=<代码>twitter4j-core-4.0.4.jar