所以「myLibrary」引用「anotherLibrary」。這兩個庫遵循http://semver.org/主SemVer應該更新級聯嗎?
如果我發佈myLibrary的新版本,迫使消費者更新到另一個庫的新的主要版本應主要版本的myLibrary也增加?
所以「myLibrary」引用「anotherLibrary」。這兩個庫遵循http://semver.org/主SemVer應該更新級聯嗎?
如果我發佈myLibrary的新版本,迫使消費者更新到另一個庫的新的主要版本應主要版本的myLibrary也增加?
這是在semver的FAQ部分特別回答的,建議主要版本不要碰撞。 http://semver.org/#what-should-i-do-if-i-update-my-own-dependencies-without-changing-the-public-api
這真的取決於主庫的公共API是否更改。我傾向於把圖書館當成一個黑匣子。我不需要知道它如何實施的細節。因此,除非內部庫以某種方式暴露,否則外部庫的API沒有改變。
因此,如果內部庫沒有暴露出來,我會打補丁編號,就是這樣。如果內部庫被暴露,那麼您將不得不決定該暴露是否已經發生了足夠的變化,以保證主要的版本衝突(不兼容或突變)。
當然,如果外部庫的API已經改變以支持內部庫的升級,那麼主要版本凹凸是有保證的。
除非庫完全嵌入你的內部,否則。
假設這兩個庫都在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
版本。即使你的庫沒有從依賴庫中暴露任何帶有類型的符號,你也破壞了用戶的依賴管理。
通過這種方式來看,你實際上使依賴('other')成爲你的API的一部分。我認爲這有時是合法的,但並不完全是這樣的。我正在努力解決這個問題。 –
@MichaelLemke這是真的,這取決於依賴管理器的能力。如果你的語言的依賴管理器支持私有嵌入式庫,那麼它是沒問題的(只要你這樣做),但是如果它需要每個庫的一個且只有一個版本,或者如果你從依賴關係中銷售類型,那麼依賴關係是「你的API「。 –
我從maven的角度來看它。 –