2012-06-05 93 views
0

有一個目前的應用程序讀取Apache常見io版本1.2的一個非常舊的版本。我們會在很長一段時間後使用最新的2.3發佈一些新的更新,我們希望僅使用最新的公共IO jar文件來運行新代碼。 我該如何處理這個問題,以便新代碼只能從舊版本中的最新通用IO jar和舊版本中讀取。 (總之不碰任何正在運行的東西)多個jar版本和從特定jar中讀取類

在線搜索我已經意識到,我需要加載類,但有點糊塗我應該做UrlClassLoader還是ClassLoader,如果類加載是正確的路徑,那麼我怎麼讀所有的類,因爲內部的類彼此依賴,所以,如果我打電話給主類來運行我的代碼它執行時不需要擔心依賴或調用每個類

請建議?提前致謝。

回答

0

類加載器絕對是解決方案的一部分,但自己實現這一點非常棘手。嘗試使用OSGi,如果您正確配置它,它將爲您執行此操作。

+0

謝謝你將考慮OSGi – kdev

0

您可以使用OSGi框架並在兩個旁邊運行Apache常見io庫。 然後,您可以通過導出並分別導入具有特定版本的軟件包來控制哪些軟件包使用哪個apache庫軟件包。

您必須在lib包: 出口型套餐:com.acme.foo;版本= 「1.24」

,並在捆綁使用它:

進口包裝:com.acme .foo; version =「[1.23,2.0)」

因爲在OSGi中,每個bundle都有自己獨立的類加載器,所有正確的子包和類的加載都會自動處理並且不會發生衝突。

您可以檢查例如these instructions and demos for writing OSGi bundles - 運行它們使用mBedded Server

+0

非常感謝您的建議。 – kdev