2012-07-03 111 views
3

我的問題:處理兩個不同版本的API的好方法是什麼? (子問題:有沒有辦法避免的classpath引用問題,如果你包括具有相同類名稱的兩個庫?)問題的如何處理兩個版本的API

說明:我有一個使用API​​的項目。我花了最近幾個月爲舊版本開發,我將爲新版本添加功能。據我所知,只有一個關鍵的區別。但是,我還沒有API(等待有人拿我的罐子),所以我不能確定是否有更多的差異。

子問題描述:我擔心兩個API之間可能存在類參考不一致(就像我說的,我還沒有確定的jar)。

我意識到你可能想要看一些代碼,但這是一個設計問題,而不是編碼問題。我希望能得到一些最佳實踐出於此。謝謝!

不是重複:我已經looked在可能顯示爲重複的一個few問題,但他們並沒有真正解決我的問題:)

+0

我不明白.NET的答案如何能夠泛泛地應用於Java問題,您是否嘗試搜索與實際相關的問題?更好的信息。 –

+0

你一定知道這一點..,我們使用'maven'來排除舊版本,並將新版本包含到classpath中來解決依賴衝突。 –

+0

@ Rp-但OP特別要求關於類路徑上的兩個庫,每個庫都有一個實現,如果給定的類。顯然「不」是最好的答案。 –

回答

3

避免或陰涼處。

如果你完全控制了類路徑,你可以使用排序:這是脆弱的,非直觀的。

如果你不這樣做,你會受到任何東西的束縛,因此產生陰影和相關的頭痛。

+0

對不起,我從來沒有聽說過陰影,你能填補我嗎? – kentcdodds

+0

@kentcdodds基本上重新打包其中一個庫,一般作爲構建過程的一部分。 –

+0

我一定很笨,但我不認爲我正在執行最佳查詢來查找你在說什麼。你能給我一個鏈接到一些文檔請:)謝謝。 – kentcdodds

2

也可以使用類加載器隔離策略。例如,如果您處於容器環境(Java EE,OSGi)中,則可以將不同版本的庫放在不同的類加載器上下文中(即不同的EJB JAR或不同的Web應用程序),並且它們不會干擾每個其他。

OSGi可以做同樣的事情;將庫A.1和A.2部署到您的OSGi容器中,並將project.uno(使用A.1)和project.dos(使用A.2)部署到同一個JVM中,並且OSGi容器處理類路徑。

+0

OSGi需要重新安裝應用程序,當然,JEE需要......好吧,JEE,並且您必須確保您的應用程序屬於正確的類加載器。在不瞭解OP的環境和退休情況的情況下,我很難推薦作爲通用解決方案。 –

+1

同意。然而,他們都是可能的。 –