簡體   English   中英

強制Jetty在父ClassLoader中加載類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM