2012-07-26 103 views
1

我正在爲某些應用程序編寫插件。讓我們假設應用程序依賴於libA-1.0,我的插件依賴於libA-2.0。版本有所不同並且彼此不兼容(即它們具有不同的api方法簽名)。如何防止從jar加載類

如何防止我的插件從libA-1.0加載類(或如何強制它使用libA.2.0中的類)?

有沒有辦法做到這一點,不寫自定義類加載器,並沒有使用forName,loadClassDefinition調用?

當您將一些庫放入* .war歸檔文件時,會出現類似問題,並且它們不會加載becouse web包含器在類路徑中具有「相同」庫。

Thaks尋求幫助。

問候, 帕維爾

+0

我很想知道如果沒有類加載器, ,但我會建議沒有。 – MadProgrammer 2012-07-26 09:25:07

回答

0

OSGI提供此功能的開箱。我確定有一些其他的插件框架提供了類似的功能。

有一個URLClassLoader應該能夠提供很多從另一個jar加載類的功能。你必須付出一些努力來改變正在完成工作的線程的類加載器。沒有手頭的例子,如果你需要一個具體的例子,你必須寫一個例子(除非你能找到一個搜索引擎)

+0

何時以及如何更改類加載器。假設我的插件在MyPlugin類中具有方法entryPoint(),並且此方法由前面提到的Application調用。 當運行時開始執行方法entryPoint()時,MyPlugin類就是由某個類加載器實現的。如果我將Thread.getCurrentThread()。setContextClassloader()中的類加載器更改爲我自定義的UrlClassLoader,這將工作嗎?爲什麼/ Wny不是? 歡迎解釋:) – 2012-07-26 10:58:00