如果依赖项发生变化,我应该增加项目中的版本号吗?

时间:2013-10-30 15:12:58

标签: maven versioning

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

如果这个依赖项有新版本,我需要使用它,我是否应该更改我的项目版本?没有对myLib进行其他修改。

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

2 个答案:

答案 0 :(得分:6)

是。在maven中,发布的版本是不可变的。如果你发布了依赖于lib-dependency-1.2.3的1.1.0,那就是它。

如果您更改为依赖于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

答案 1 :(得分:2)

任何可能影响行为的代码更改都应该被赋予一个新的版本号,换句话说:任何不是绝对微不足道的变化都应该给出一个新的版本号。更改后的依赖性肯定有资格获得,因为除非您对依赖项进行彻底的代码检查,否则您没有理由认为它们只进行了绝对的微不足道的更改。

变化通常被宣传为“小”(类似于我上面称之为绝对微不足道),但它们几乎没有。在某人的使用案例中,它们可能是微不足道的,但在其他人的用例中则不然。我甚至已经看到了一个项目中只有Javadocs发生变化的情况,这些变化会让事情发生变化。 (你可以争论一个人对Javadoc强烈依赖是多么聪明,但除此之外,不是吗?)

这并不是说你不能积累变化并将它们作为单个版本发布。在积累时,您的项目不断变化,应该有...-SNAPSHOT版本。应该没有myLib-1.1.0的两个版本(没有-SNAPSHOT)甚至变化不大。

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