2017-07-28 96 views
1

我有几个库,其中一些依赖于另一个库。因此,对于如:如果我发布的Maven库,如果它的依赖项之一更改?

一个1.0.0 无依赖

乙1.0.0 取决于:一1.0.0

的问题是:

如果我释放出与1.0.1这个版本是否向后兼容1.0.0我应该释放B?

+1

如果你能保证一个与1.0.1是向后兼容1.0.1不需要发布B的新版本。您应该在版本模式中明确表示1.0.1意味着bug修复,1.1.0意味着增强但向后兼容(语义版本控制)......只有文档中有一个好的提示为用户o f A应该被做。 – khmarbaise

回答

1

这可能取决于代码的具体细节以及工件是如何部署的,但通常情况下,您需要释放B才能使代码更改为可见。

  • 假设B是一个瓶子工件,而另一个客户端在该工件上有一个<dependency>。这意味着客户端也对A具有传递依赖性,但是在B中的<dependency>中表示的特定版本。以您的示例为例,客户端依赖于B 1.0.0,它本身依赖于A 1.0 .0,所以客户端将会传递一个1.0.0。为了向客户发布A中的错误修复,您需要释放B 1.0.1,其A上的<dependency>更新为指向A 1.0.1。
  • 假设B是部署在Web应用程序容器中的战争工件。网络应用程序使用的每个罐子<dependency>都在内部战争的lib目录内。为了向此Web应用程序发布A中的错误修复,您需要释放B 1.0.1,其A上的<dependency>更新为指向A 1.0.1。

在第一个例子,(客户机依赖于B作为罐),一个可能的解决方法是为客户端通过在加入了自己明确<dependency>,可能使用用于柔性的版本范围覆盖A的版本拿起最新发布的版本。这可能会导致维护缺陷,因为这意味着客户将A版本和B版本作为B版本的一部分进行组合。一般来说,最好是释放B,但如果难以释放B,那么这可能是一个可行的短期解决方法。在传递依赖和版本范围语法

更多详情,请访问:

+0

谢谢克里斯!主要观点是“一般来说,最好是释放B,但如果难以释放B,那么这可能是一个可行的短期解决方法。”我想我会发布B,这不是难事 –

+1

我会阻止使用版本范围,因为这会让你的内部版本无法再生......更好地显式覆盖依赖关系....最近的依赖项获胜... – khmarbaise

+0

@khmarbaise,是,我也不喜欢范围版本 –

相关问题