是否可以使用次要版本更新来更新传递依赖性?

时间:2014-01-30 10:58:01

标签: scala maven sbt backwards-compatibility

假设我创建了从版本foo1.0.0的库1.0.1的二进制兼容更新。图书馆foo通过Maven发布。

我是否可以使用此次要版本更新来同时追踪foo的依赖项的次要版本?例如,版本1.0.0使用scalaVersion := "2.10.1"。我可以在foo 1.0.1中将其更改为scalaVersion := "2.10.3",还是会导致麻烦?

假设我在另一个项目中使用foo作为

"mygroup" %% "foo" % "1.0.+"

2 个答案:

答案 0 :(得分:6)

涉及多个注意事项,但通常是的,如果它们是二进制兼容的,您可以更改依赖项的版本。 Scala团队的目标是将2.10.x版本与二进制兼容。您可以针对Scala 2.10.1进行编译,并在运行时使用2.10.3。

只要您使用两者中存在的方法和类型,您通常可以对Scala库执行相反的操作。不过,大多数图书馆并不关心这个方向。关于二进制兼容性的其他警告:

  • 不同的图书馆对版本颠簸的含义有不同的政策。
  • 库可能有也可能没有自动检查二进制兼容性。
  • MiMa这样的自动化(由Scala使用)不会捕获各种不兼容性。例如,MiMa只捕获“语法”不兼容性(在运行时抛出LinkageError的那些)。
  • 二进制兼容性并不意味着源兼容性。

但通常不建议使用“1.0。+”等动态修订版。它们使复制构建更加困难并影响分辨率。

答案 1 :(得分:2)

通常,现代软件遵循semantic versioning

  

给定版本号MAJOR.MINOR.PATCH,增加:

MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards-compatible manner, and
PATCH version when you make backwards-compatible bug fixes.

因此"2.10.3"与任何"2.10.x"版本兼容。

通常我们不应该关心.PATCH部分,除非修复了影响我们代码的错误。我猜是这样的。

相关问题