2013-07-19 25 views
0

我在WEB-INF/classes文件夾下的war文件中定義了一個接口。這個想法是將一個實現放在課程路徑中,而不會打擾戰爭文件。我認爲的解決方案是將實現放置在tomcat_home/lib目錄中,但由於可能使用不同的類加載器來實現和接口,所以接口沒有得到解決,並且拋出了ClassNotFound。這種情況有可能實現嗎?tomcat lib文件夾中的接口實現無法引用web-inf/classes文件夾中的接口

回答

0

你是因爲你的實現是加載在內存中的接口之前,因爲在Application Server運行時類加載器遵循其中Tomcat的lib類在WEB-INF /類的類加載前一個代表團層級收到此錯誤。所以如果你想在tomcat lib中刪除錯誤,那麼兩者都會同時加載。

enter image description here

在代表團設計,前一個類加載器委託類加載到其父嘗試加載類本身。類加載器父類可以是System類加載器或另一個自定義類加載器。如果父類加載器無法加載類,類加載器嘗試加載類本身。實際上,類加載器只負責加載父類不可用的類。一個類加載器在加載層次較高的類不能在層次結構是指類可用更低。

0

1)通用類加載器,從CATALINA_HOME/lib加載沒有個別webapp內的類的知識。

2)負責加載您的webapp的 類的webapp類加載器不知道CATALINA_HOME/lib。如果它不能加載一個類,它將代理鏈。

該解決方案都必須使用相同的類加載器加載。您必須將這兩個類都保留在CATALINA_HOME/lib之下,以便通用的 類加載器可以解決它們。