Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 次要版本更新能否用于次要更新可传递依赖项?_Scala_Maven_Sbt_Backwards Compatibility - Fatal编程技术网

Scala 次要版本更新能否用于次要更新可传递依赖项?

Scala 次要版本更新能否用于次要更新可传递依赖项?,scala,maven,sbt,backwards-compatibility,Scala,Maven,Sbt,Backwards Compatibility,假设我创建了一个二进制兼容的库foo更新,从版本1.0.0到1.0.1。库foo通过Maven发布 我是否可以使用此次要版本更新同时升级foo依赖项的次要版本?例如,1.0.0版使用了scalaVersion:=“2.10.1”。我可以在foo1.0.1中将其更改为scalaVersion:=“2.10.3”,还是会引起麻烦 假设我在另一个项目中使用foo作为 "mygroup" %% "foo" % "1.0.+" 有几个考虑因素,但通常是的,如果依赖项是二进制兼容的,您可以更改它们的版本。

假设我创建了一个二进制兼容的库
foo
更新,从版本
1.0.0
1.0.1
。库
foo
通过Maven发布

我是否可以使用此次要版本更新同时升级
foo
依赖项的次要版本?例如,1.0.0版使用了
scalaVersion:=“2.10.1”
。我可以在foo1.0.1中将其更改为
scalaVersion:=“2.10.3”
,还是会引起麻烦

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

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

有几个考虑因素,但通常是的,如果依赖项是二进制兼容的,您可以更改它们的版本。Scala团队的目标是使2.10.x版本与二进制兼容。您可以根据Scala 2.10.1进行编译,并在运行时使用2.10.3

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

  • 不同的库对版本碰撞的含义有不同的策略
  • 库可以自动检查二进制兼容性,也可以不自动检查二进制兼容性
  • 像(Scala使用的)自动化并不能捕获所有类型的不兼容。例如,MiMa只捕获“语法”不兼容(在运行时抛出
    LinkageError
    s的不兼容)
  • 二进制兼容性并不意味着源代码兼容

但是,通常不建议使用“1.0.+”之类的动态修订。它们使得复制构建变得更加困难,同时也影响了解析速度。

通常现代软件会紧随其后

给定版本号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
部分,除非影响我们代码的bug已经修复。我想情况就是这样。

您应该在父pom.xml中管理版本号。这样,更新版本将填充到所有子模块。这就是你想要的吗?你怎么知道Scala 2.10.3不会破坏你的代码?或者一个依赖于您的代码的项目?@chris.tian没有父pom。scala库独立于我的库。@按惯例,次要版本是二进制兼容的bug fix-only版本。我很惊讶您建议不要使用
+
版本。我开始很喜欢他们了。它允许我发布bug修复版本,任何新项目都可以自动利用它们。与我的问题有点相关:如果我的项目的两个依赖项A和B在两个不同的次要版本中依赖于C,例如
1.0.0
1.0.1
,我想我最终会在
lib\u managed
中同时拥有
1.0.0
,或者sbt会自动退回到
1.0.1
?这就是我使用
1.0.+
的动机。在lib_managed上,请参阅。Ivy将把两个不同的版本解析为一个。常春藤的默认策略是使用最新的版本,因此1.0.1将被选择超过1.0.0。在动态修订中,它们使再现性更加困难。您可以这样做,但它需要更多的工作,最终您真的不再使用动态修订。请注意,Gradle或Maven也不推荐它们。