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

SBT如何在依赖项中选择最高版本?,sbt,Sbt,这是一个关于版本控制和工作流的问题 我有多个项目 projectA/build.sbt version := "1.0.0" libraryDependencies ++= Seq( "com.example" % "projectB" % "1.0.0", "com.example" % "util" % "1.0.0" ) version := "1.0.0" libraryDependencies ++= Seq( "com.example" % "util" % "1.0.

这是一个关于版本控制和工作流的问题

我有多个项目

projectA/build.sbt

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

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

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

我在
util
中添加了一个方法

util/build.sbt

version := "1.0.0"
libraryDependencies ++= Seq(
  "com.example" % "projectB" % "1.0.0",
  "com.example" % "util" % "1.0.0"
)
version := "1.0.0"
libraryDependencies ++= Seq(
  "com.example" % "util" % "1.0.0"
)
version := "1.0.0"
version := "2.0.0"
version := "1.1.0"
libraryDependencies ++= Seq(
  "com.example" % "util" % "2.0.0"
)
version := "1.1.0"
libraryDependencies ++= Seq(
  "com.example" % "projectB" % "1.1.0",
  "com.example" % "util" % "1.0.0"
)
这个新增的功能很棒,所以我用它来优化
projectB

projectB/build.sbt

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

我希望
projectA
更快,所以我加入了
projectB

projectA/build.sbt

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

现在,
projectA
需要
util
version
1.0.0
,但是
projectb
需要
util
version
2.0.0

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

是否有一种方法可以使我的项目依赖项具有最低版本

例如,如果
projectA
需要
util
版本
1.0.0
projectB
需要
util
版本
2.0.0
projectA
将使用
2.0.0
版本

如果是这样,如果有可用的
util
版本
3.0.0
,在这种情况下会发生什么?
projectA
会使用
2.0.0
,还是
3.0.0

对我来说,如果我能让一个项目从它自己的依赖项和(递归地)它的依赖项中使用最伟大的版本,那将是非常理想的,但不能超过这个版本

对我来说,如果我能有一个最大限度地利用资源的项目,那将是理想的 版本,从它自己的依赖项和(递归地)它的 依赖项的依赖项,但不高于此值

从Sbt文档中:

冲突管理器决定在依赖项解决时要做什么 引入同一库的不同版本。默认情况下 选择最新版本

这已经是默认行为


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

哦,太棒了!谢谢你的链接。我习惯了Maven,我相信它采用了最接近的依赖项指定的版本。这种行为要好得多。