2014-04-15 50 views

回答

2

這真的取決於主庫的公共API是否更改。我傾向於把圖書館當成一個黑匣子。我不需要知道它如何實施的細節。因此,除非內部庫以某種方式暴露,否則外部庫的API沒有改變。

因此,如果內部庫沒有暴露出來,我會打補丁編號,就是這樣。如果內部庫被暴露,那麼您將不得不決定該暴露是否已經發生了足夠的變化,以保證主要的版本衝突(不兼容或突變)。

當然,如果外部庫的API已經改變以支持內部庫的升級,那麼主要版本凹凸是有保證的。

  • 沒有外部API變化 - 更新補丁數量
  • 外部API暴露內庫類型 - 更新或大或小的版本
  • 外部API改變 - 更新或大或小取決於水平更改
0

除非庫完全嵌入你的內部,否則。

假設這兩個庫都在1.0。用戶可以宣佈他們的依賴,如:

other ~> 1.0 
yours ~> 1.0 

~>指於任何版本1.0兼容,即1.x.y的依賴。

你的庫聲明:

other ~> 1.0 

所以一切正常,和依賴才能解決。如果other移動到1.1.0,一切仍然有效。

現在,你的庫切換到:

other ~> 2.0 

...並釋放這是1.1.0版本。這與用戶聲明的依賴關係不兼容。他們想要版本的other版本和yours版本,該版本以前的工作,但現在不。因此,您必須將其發佈爲2.0版本。即使你的庫沒有從依賴庫中暴露任何帶有類型的符號,你也破壞了用戶的依賴管理。

+0

通過這種方式來看,你實際上使依賴('other')成爲你的API的一部分。我認爲這有時是合法的,但並不完全是這樣的。我正在努力解決這個問題。 –

+0

@MichaelLemke這是真的,這取決於依賴管理器的能力。如果你的語言的依賴管理器支持私有嵌入式庫,那麼它是沒問題的(只要你這樣做),但是如果它需要每個庫的一個且只有一個版本,或者如果你從依賴關係中銷售類型,那麼依賴關係是「你的API「。 –

+0

我從maven的角度來看它。 –