[英]Forcing Jetty to load classes in the parent ClassLoader
我從本機代碼啟動JVM,然后啟動Jetty。 然后,Web應用程序將加載一個名為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加載兩次)。 我怎么做?
事實證明,您可以使用WebAppContext.addSystemClass()強制WebAppClassLoader從父ClassLoader加載JPeripheral。 在我的情況下, WebAppContext.addSystemClass("org.jperipheral.")
達到了目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.