2011-06-16 33 views
0

我正在試圖製作一個簡單的應用程序,用於在運行時加載和運行一些類。舉例來說,假設我有這樣的配置:在單獨的上下文中運行類

module1.classpath=module1.jar,somelibs1.jar 
module1.class=com.blabla.Module1 
module2.classpath=module2.jar,somelibs2.jar 
module2.class=com.blabla.Module2 

然後,我需要加載module1.classpath指定的庫和運行module1.class與庫加載。之後我需要加載module2.classpath並運行module2.clas與這些庫。

我該如何處理somelibs1.jarsomelibs2.jar裏面有相同類的情況?基本上我想運行module1.jar專門使用somelibs1.jarmodule2.jar專門使用somelibs2.jar。我如何實現?

我猜我需要爲我的每個類創建一個單獨的類加載器並將該類加載到類加載器中。不過,我會欣賞一些例子,或者至少確認這是一種正確的方式。

回答

1

對於OSGI,這似乎是一個相當不錯的用例。我建議使用OSGI,因爲你所需要的一切都是由OSGI提供的。

但是,如果由於某種原因您不能使用OSGI,那麼您需要做的是爲每個模塊創建一個類加載器。通過ClassLoaderX載入moduleX.class,並將moduleX.classpath添加到ClassLoaderX的路徑中。你可以使用一套簡單的URLClassLoader來做到這一點。

+0

謝謝,我認爲這完全涵蓋了這個問題。還特別感謝提及OSGI,現在我知道它存在並閱讀它:D – bezmax 2011-06-16 07:52:56

0

謝謝你的問題。很有意思。

在一個JVM實例中,您似乎無法使用同一類的多個版本。我從來沒有這個任務,我不知道如何實現這一點。

但讓我們玩吧。我不知道你開發什麼特殊的應用程序。也許你可以運行許多JVM,並且每個JVM都有獨有的CLASSPATH。

編寫可以運行的應用程序(例如使用Runtime.exec())另一個JVM並通過某個通道(可能是網絡)與其進行對話。

+0

將它加載到單獨的JVM中將會消耗大量資源。 Suraj Chandran提出的方法要好得多,因爲它允許使用單獨的類加載器將所有內容加載到一個JVM中。 – bezmax 2011-06-16 07:54:26

+0

嗯。也許。但是你可以檢查OSGi是如何工作的。這是一個非常繁重的解決方案。那麼,你的決定是你的決定:-)。祝你好運! – 2011-06-16 08:07:32