java - 强制 Jetty 加载父 ClassLoader 中的类

标签 java java-native-interface jetty

我从 native 代码启动 JVM,然后启动 Jetty。然后,Web 应用程序加载一个名为 JPeripheral 的库。 native 启动器和 JPeripheral 都依赖于名为 Jace 的 native 库。当 Web 应用程序尝试加载 Jace Java 时,会抛出:

java.lang.UnsatisfiedLinkError: native 库 jace.dll 已在另一个类加载器中加载

这是 web 应用程序内的 ClassLoader 层次结构:

WebAppClassLoader -> sun.misc.Launcher$AppClassLoader -> sun.misc.Launcher$ExtClassLoader

Jace.dll 和 Jetty 均由 sun.misc.Launcher$AppClassLoader 加载(由 native 启动器使用)。 JPeripheral由WebAppClassLoader加载。

解决此问题的一种方法是从 sun.misc.Launcher$AppClassLoader 加载 JPeripheral(因此 jace.dll 从同一个类加载器加载两次)。我该怎么做?

最佳答案

事实证明,您可以使用 WebAppContext.addSystemClass() 强制 WebAppClassLoader 从父 ClassLoader 加载 JPeripheral。就我而言,WebAppContext.addSystemClass("org.jperipheral.") 成功了。

关于java - 强制 Jetty 加载父 ClassLoader 中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8011643/

相关文章:

java - 使用嵌入式 Jetty 作为应用程序服务器时内存阻塞

java - 删除字符串中引号之间的注释

java - 如何使 java 准备语句像大查询的查询或如何在大查询中转义参数

java - 如何将可绘制集的背景/颜色更改为 View 的背景?

java - Play 框架中的时间字段

java - 在 Java 7 上运行带有 JNI 的 Java 5/6 会给出堆栈防护警告

java - 如何在 JNI 中将 C 结构来回传递给 Java 代码?

android - 意外的 e_type : 1 Linking release library using JNI + CMake + Android. mk

java - Jetty 7 - 禁用根文件夹/处的目录列表

java - 是否可以对 Jetty 的 servlet 映射使用正则表达式?