2010-01-19 56 views
0

我想支持第三個軟件的不同版本。 所以我打算創建一個可以創建不同版本的Object的工廠,但我不知道該怎麼做,不同版本的3rd軟件具有相同的包層次結構,當我將它們放在一個工程中時會發生衝突任何人都有這樣的經歷和任何想法?如何讓不同版本的JAVA API一起工作?

感謝

張春華

+0

太糟糕了,你最好開始尋找替代品的庫lib – Dapeng 2010-01-19 03:07:55

回答

3

最好的辦法是OSGi。另請參閱此Tutorial作爲起點。

+0

@zjffdu:這絕對是最好的選擇。 OSGi是爲了管理複雜的依賴關係而設計的,就像這個一樣,有多個版本的庫和多個服務提供者。 – 2010-01-19 03:29:33

+0

問題是,您的代碼,第三方庫以及其他應用程序都需要「OSGi-ready」。 – Thilo 2010-01-19 03:30:49

+0

@Thilo綁定任意第三方庫非常簡單,使用Eclipse的導入功能需要大約20-30s。 – 2010-01-19 03:37:10

1

最簡單的方法是在你的代碼中有適配器(每個版本支持一個包)。

如果庫的版本與舊版本兼容,則可以針對最新版本進行編譯(這是如何完成JDBC驅動程序,需要使用相同驅動程序jar支持JDBC版本2,3和4) ,但如果它們不是,則必須分別編譯這些適配器包(針對它們的庫版本)。第二種方式也更安全。 然後,您可以將二進制文件合併在一起。你的工廠將確保只有正確的代碼才能運行。

然後,您將有一個工廠計算出要使用哪個版本的庫(通過以某種方式探測它,或者必須用戶明確配置它),並實例化適當的適配器。

更新:上面假定您要生成一個可以與另一個JAR文件的不同版本一起工作的JAR文件,但是在運行時(在給定的安裝中),將只有一個固定版本的第三方庫。如果您需要在相同的JVM中支持相同類的多個版本,那麼您確實需要查看OSGi。

0

如果您需要在運行時加載多個版本,則另一種解決方案是使用父代最後一個代理加載具有其自己的類加載器的類。你必須爲此編寫你自己的類加載器,你可以谷歌的「父最​​後的類加載器」找到一些例子。