如何解决springboot可执行jar中的JNI NoClassDefFoundError
我有使用 jni 连接到客户端共享动态库的 springboot 应用程序。
有一个**回调方法**,它使用ine注册函数注册到dll中。 此方法在来自 dll 的某些事件上调用。
当作为来自 intellij 的 Java 应用程序执行时,这工作正常,但当以 ** 作为 jar ** 执行时,并且当调用此回调方法时,其抛出 **NoClassDefFoundError ** 如下
java.lang.NoClassDefFoundError: com/test/Sample
Caused by: java.lang.ClassNotFoundException: com.test.Sample
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
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)
默认情况下,springboot 将所有类放在 BOOT-INF 文件夹中。
当我手动修改 jar 并在 BOOT-INF 之外添加这个类时,即在 rootLevel 它工作。 如下图:
BOOT-INF
com
META-INF
org
在上面的代码片段中,com 是在子包 test 下存在 Sample 类的目录。
使用的springboot版本:2.3.6.RELEASE
使用springboot-maven-plugin创建可执行jar
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。