SBT如何在依赖项中选择最高版本?

时间:2014-01-29 20:45:34

标签: sbt

这是关于版本控制和工作流程的问题。

我有多个项目

了projectA / build.sbt

version := "1.0.0"
libraryDependencies ++= Seq(
  "com.example" % "projectB" % "1.0.0",
  "com.example" % "util" % "1.0.0"
)

项目B / build.sbt

version := "1.0.0"
libraryDependencies ++= Seq(
  "com.example" % "util" % "1.0.0"
)

UTIL / build.sbt

version := "1.0.0"

------------------------ 发展 --------------- ---------

我在util中添加了一个方法。

UTIL / build.sbt

version := "2.0.0"

这个附加功能很棒,所以我用它来优化projectB

项目B / build.sbt

version := "1.1.0"
libraryDependencies ++= Seq(
  "com.example" % "util" % "2.0.0"
)

------------------------ 发展 --------------- ---------

我希望projectA更快,所以我拉入projectB

了projectA / build.sbt

version := "1.1.0"
libraryDependencies ++= Seq(
  "com.example" % "projectB" % "1.1.0",
  "com.example" % "util" % "1.0.0"
)

------------------------ 问题 --------------- ---------

现在,projectA需要util版本1.0.0,但project B需要util版本2.0.0

我可以更新projectA以使用util的新版本。问题是我需要更新的项目和依赖项的数量可能非常大,并且依赖项链可能非常长。 (想象projectZ取决于projectAutil。)

有没有办法可以让我的项目依赖项具有最低版本?

例如,如果projectA需要util1.0.0projectB需要util版本2.0.0projectA会风使用2.0.0版本。

如果是这样的话,如果3.0.0的版本util可用,会发生什么情况?使用projectA2.0.0最终会3.0.0结束吗?

对我来说,如果我能让一个项目使用最好的版本,从它自己的依赖项和(递归地)它的依赖项依赖项,那将是理想的,但不高于它。

1 个答案:

答案 0 :(得分:3)

  

对我来说,如果我能让一个项目使用最好的项目,那将是理想的   版本,从它自己的依赖项和(递归)它的   依赖者的依赖性,但不高于此。

来自Sbt文档http://www.scala-sbt.org/release/docs/Detailed-Topics/Library-Management.html#conflict-management

  

冲突管理器决定在依赖项解析时要执行的操作   带来了同一个库的不同版本。默认情况下   选择了最新版本。

这已经是默认行为。

相同的文档解释了如何强制版本,指定最低版本等。