2012-08-14 97 views
7

我們目前正在研究在我們的應用程序中使用OneJar(出於多種原因),但是我們的應用程序使用一些定製的URLClassloader來加載應用程序擴展。OneJar和動態類加載

當捆綁爲「OneJar」罐子時,我們得到ClassNotFound例外。有問題的類駐留在捆綁的Jar中,我們只是依靠類加載器機制來解決父/子關係。

也就是說。我們有一個共同的interface它存儲在捆綁Jar(應該在父類的類加載器上下文中)。該擴展實現了這個interface(允許我們調用擴展),並依賴於子類加載器使用父類加載器的資源查找功能的能力。

有沒有人有過這方面的經驗或闡明我們如何去解決它。

我很想在其它類似機制(捆綁我們的庫JAR的到一個JAR資源,不需要使用一切,罐其unjar到單個文件)

+0

你知道,如果你有愛的人的勇氣,誰下來投票沒有至少具有正派留下來評論整流這究竟是爲什麼他們覺得有必要這樣做。它不會幫助任何人。沒有某種解釋,很難知道如何改進未來的問題/答案 – MadProgrammer 2013-12-11 19:28:21

回答

6

我發現我是在製造關於我們的類加載器是如何創建的一些假設。

我認爲,隨着它的父類加載器會使用它的類加載器(即的getClass()。getClassLoader()),但相反,它用的是SystemClassLoader不是

。這意味着當子類加載器尋找共享接口時,它找不到它(因爲它正在查看SystemClassLoader而不是OneJar類加載器)。

我加入CustomClassLoader.class.getClassLoader()到我們自定義的類裝載器的構造

+0

你能接受你自己的答案嗎? – fglez 2013-03-06 09:59:28

+0

@fglez是否認爲這是「完成」的事情,但如果它有幫助... – MadProgrammer 2013-03-06 10:03:05