假设我有一个名为 myLib-1.1.0 的项目。该项目依赖于 lib-dependency-1.2.3。
如果此依赖项有新版本并且我需要使用它,我是否也应该更改我的项目版本?没有对 myLib 进行其他修改。
同时 myLib 是各种其他项目的依赖项。我主要担心的是依赖项的微小变化可能会对上游产生影响。
假设我有一个名为 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
),即使是最小的变化。
您重新发布项目的事实也明确表明应该重做回归测试等以验证它仍在处理其依赖项的更改。