2010-03-09 15 views
7

假設使用依賴管理工具(例如,Maven 2),尋找處理項目中主要依賴項升級的一些最佳實踐。如何處理主要框架/依賴項升級?

具體地說,我感興趣的是:

  • 如何獲得繼承應用起來對日期(例如,春1.2.x的到2.5.X)
  • 可以放什麼做法納入經過這樣的檢修以保持應用程序的最新狀態

您自己的經驗或任何您遇到/發現有用的文章/論文都是受歡迎的。

編輯: 更新依賴版本號是微不足道的。基於對依賴性的更改(棄用,刪除,對參數/返回值中的類型的更改等),我更加關注如何處理需要做出的更改。如果在未來有一種好方法來緩解這些變化,那麼保持依賴關係是最新的如果允許您保持更改並防止浪費大量時間以獲得更安全的功能x 2.1'。

回答

1

根據我的經驗,依賴項升級是由依賴項所擁有的必要功能實現的,作爲對依賴項中的錯誤的修復,直接影響您自己的代碼,支持新的Java版本或保留您的代碼符合特定標準(關於影響安全性的依賴性)。如果你的代碼不屬於這些必要的領域之一,那麼我就不會費心把它們保持在最新狀態,而只是根據需要更新它們,因爲從發佈到發佈的更新可能實際上會將錯誤引入到應用程序中。

我一直髮現,最佳實踐始於在應用程序中完成生產週期,將其作爲穩定構建發佈,並在下一次開發迭代中手動更新依賴項。在您的父POM中集中版本將導致最小的依賴版本修改和增加的可擴展性。假設你正在使用Maven:

<dependency> 
    <groupId>your.dep.group</groupId> 
    <artifactId>your-artifact-id</artifactId> 
    <version>${desiredVersion}</version> 
</dependency> 
+0

我明白你在說什麼,但你正在掩蓋這個問題。完全。 假設你處於這種情況之一,有哪些最佳實踐? (或者每個人只是讓Eclipse(也許m2eclipse)讓你知道類不再存在,已經不再使用,等等...並從那裏去?) 對於我的問題的第二部分,保持你的依賴有點到目前爲止,如果您已經升級到具有'Securer X 2.0'功能的版本並減少了任何中斷,那麼您可以更容易地進行升級(或者不必要)。 –

+0

我想說的最佳實踐是:只有當您使用的依賴項版本變得明顯時,纔會更新您的依賴關係。讓你的IDE告訴你什麼時候某個東西被棄用或者不再存在,這就是它的存在。我不相信保持最新會阻止未來廣泛的代碼更改。這假設你的依賴關係發展的知識。你所能做的就是測試,測試,測試並最小化你對依賴關係的依賴。 – Joel

1

處理的依賴性變動的良好做法是相同的應用程序設計良好做法。您希望對體系結構進行分層,並儘可能減少代碼在每個依賴項上的廣泛耦合,以便將更改隔離開來,以便升級依賴關係不會破壞應用程序的每個部分。接口並使業務邏輯與基礎架構代碼分離的代碼。

對於小型升級(依賴的升級點發行),它可以幫助如果你有一個全面的單元測試,以檢測由於API的變化故障。這是爲什麼它有時可以幫助編寫看起來在表面上始終工作的簡單測試的一個重要原因。一個例子是編寫一個簡單的JDBC單元測試來執行一個簡單的查詢。這看起來像是浪費了精力,直到在數據庫升級後發生JDBC驅動程序的運行時問題(它發生在我身上)之前。對於較大的更改(例如像Spring之類的不兼容版本的框架之間的升級),如果您有一些自動化的功能或集成測試,或者至少有一個功能規範,您的QA人員可以運行以驗證高級別功能。如果您正在升級的框架API不同,單元測試可能不再相關,需要進行大量的代碼更改。

管理從一個版本的依賴到另一個不兼容的版本的實際策略部分實際上取決於你在做什麼。成熟的圖書館將提供某種遷移路徑,並希望不會要求您重寫所有內容。將與框架升級相關的代碼更改與實現新功能相關的更改分開是一個好主意。通過這種方式,如果出現問題,您將知道它與框架升級有關,而不是您在實現新功能時破壞的內容。

使這非常困難的部分原因是,在運行時,您的JVM中只能有一個特定依賴項的版本,因此您必須一次更新所有代碼。 OSGi通過允許運行不同的OSGi包依賴於不同的依賴版本來解決這個特定的問題,所以你可以在運行時依賴於不同的依賴版本。這就是Eclipse如何在不破壞其他插件的情況下管理插件的依賴關係。