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

0__*_*0__ 6 scala backwards-compatibility maven sbt

让我们说我foo从版本1.0.0到库创建了我的库的二进制兼容更新1.0.1.图书馆foo通过Maven发布.

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

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

"mygroup" %% "foo" % "1.0.+"
Run Code Online (Sandbox Code Playgroud)

Mar*_*rah 6

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

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

  • 不同的库对版本颠簸的含义有不同的策略.
  • 库可能有也可能没有自动化来检查二进制兼容性.
  • MiMa(由Scala使用)之类的自动化并不能解决各种不兼容问题.例如,MiMa只捕获"语法"不兼容性(LinkageError在运行时抛出s).
  • 二进制兼容性并不意味着源兼容性.

但是,通常不建议使用"1.0.+"之类的动态修订.它们使复制构建更加困难并影响分辨率.