【发布时间】: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