假设我有一个名为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
),甚至没有什么变化。
您重新发布您的项目的事实也明确表明,回归测试等应该重做以验证它是否仍在使用其依赖项中的更改。