2017-07-28 102 views
1

我有幾個庫,其中一些依賴於另一個庫。因此,對於如:如果我發佈的Maven庫,如果它的依賴項之一更改?

一個1.0.0 無依賴

乙1.0.0 取決於:一1.0.0

的問題是:

如果我釋放出與1.0.1這個版本是否向後兼容1.0.0我應該釋放B?

+1

如果你能保證一個與1.0.1是向後兼容1.0.1不需要發佈B的新版本。您應該在版本模式中明確表示1.0.1意味着bug修復,1.1.0意味着增強但向後兼容(語義版本控制)......只有文檔中有一個好的提示爲用戶o f A應該被做。 – khmarbaise

回答

1

這可能取決於代碼的具體細節以及工件是如何部署的,但通常情況下,您需要釋放B才能使代碼更改爲可見。

  • 假設B是一個瓶子工件,而另一個客戶端在該工件上有一個<dependency>。這意味着客戶端也對A具有傳遞依賴性,但是在B中的<dependency>中表示的特定版本。以您的示例爲例,客戶端依賴於B 1.0.0,它本身依賴於A 1.0 .0,所以客戶端將會傳遞一個1.0.0。爲了向客戶發佈A中的錯誤修復,您需要釋放B 1.0.1,其A上的<dependency>更新爲指向A 1.0.1。
  • 假設B是部署在Web應用程序容器中的戰爭工件。網絡應用程序使用的每個罐子<dependency>都在內部戰爭的lib目錄內。爲了向此Web應用程序發佈A中的錯誤修復,您需要釋放B 1.0.1,其A上的<dependency>更新爲指向A 1.0.1。

在第一個例子,(客戶機依賴於B作爲罐),一個可能的解決方法是爲客戶端通過在加入了自己明確<dependency>,可能使用用於柔性的版本範圍覆蓋A的版本拿起最新發布的版本。這可能會導致維護缺陷,因爲這意味着客戶將A版本和B版本作爲B版本的一部分進行組合。一般來說,最好是釋放B,但如果難以釋放B,那麼這可能是一個可行的短期解決方法。在傳遞依賴和版本範圍語法

更多詳情,請訪問:

+0

謝謝克里斯!主要觀點是「一般來說,最好是釋放B,但如果難以釋放B,那麼這可能是一個可行的短期解決方法。」我想我會發布B,這不是難事 –

+1

我會阻止使用版本範圍,因爲這會讓你的內部版本無法再生......更好地顯式覆蓋依賴關係....最近的依賴項獲勝... – khmarbaise

+0

@khmarbaise,是,我也不喜歡範圍版本 –

相關問題