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