如果依赖项发生更改,我是否应该增加项目中的版本号



假设我有一个名为myLib-1.1.0的项目。此项目依赖于 lib-dependency-1.2.3。

如果此依赖项有新版本并且我需要使用它,我是否也应该更改我的项目版本?不会对 myLib 进行其他修改。

同时myLib是其他各种项目的依赖项。我主要担心的是依赖项中的微小变化可能对上游产生的影响。

是的。在 maven 中,已发布的版本是不可变的。如果您发布 1.1.0 并依赖于 lib-dependency-1.2.3,那么就是这样。

如果您更改为依赖于 lib-dependency-1.2.4,那么这是一个新版本。您不应该重新部署 1.1.0,因为有些人可能已经拉了那个(据说是不可变的)1.1.0。所以这意味着你需要一个不同的版本,即使它只是一个新的限定符(例如myLib-1.1.0-RC-2,但最好是1.1.1)

Maven 在本地存储库中拥有发布版本

后不会重新检查远程存储库的发布版本,因此,如果有人在本地已经拥有 1.1.0,他们将不会获得新的修复 1.1.0。

关于你的涟漪问题。上游项目应依赖于可接受的最低发布版本。即,如果上游项目本身可以使用 myLib-1.1.0,因为它不需要(间接)lib-dependency-1.2.4,那么它应该保留在 1.1.0

任何可能影响行为的代码更改都应被赋予一个新的版本号,换句话说:任何不是绝对微不足道的更改都应该被赋予一个新的版本号。更改的依赖项肯定符合条件,因为除非您对依赖项进行彻底的代码检查,否则您没有理由假设它们只进行了绝对微不足道的更改。

变化通常被宣传为"小"(类似于我上面所说的绝对微不足道的),但它们几乎从来没有。它们在某人的用例中可能可以忽略不计,但在其他人的用例中则不能。我甚至见过这样的情况:在一个项目中,只有对Javadocs的更改会分解事情。(你可能会争论某人强烈依赖Javadoc是多么聪明,但这不是重点,不是吗?

这并不是说你不能积累更改并将其中一堆作为单个版本发布。在积累的同时,您的项目正在不断变化,并且应该有一个...-SNAPSHOT版本。不应该有两个版本的myLib-1.1.0(没有-SNAPSHOT)有哪怕是最小的变化。

您重新发布项目的事实也明确表明了这样一个事实,即应该重做回归测试等,以验证它是否仍在处理其依赖项中的更改。

最新更新