【问题标题】:Forcing Jetty to load classes in the parent ClassLoader强制 Jetty 在父 ClassLoader 中加载类
【发布时间】:2011-11-04 15:23:12
【问题描述】:

我从本机代码启动 JVM,然后启动 Jetty。然后一个 webapp 加载一个名为 JPeripheral 的库。原生启动器和 JPeripheral 都依赖于一个名为 Jace 的原生库。当 webapp 尝试加载 Jace Java 时抛出:

java.lang.UnsatisfiedLinkError: Native Library jace.dll already loaded in another classloader

这是 webapp 内的 ClassLoader 层次结构:

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

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

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

【问题讨论】:

    标签: java java-native-interface jetty


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 2015-07-12
      • 2012-12-05
      • 1970-01-01
      • 2019-09-25
      • 2014-08-23
      相关资源
      最近更新 更多