【问题标题】:How could SBT choose highest version amongst dependencies?SBT 如何在依赖项中选择最高版本?
【发布时间】:2014-01-30 20:34:44
【问题描述】:

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

我有多个项目

projectA/build.sbt

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

projectB/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

projectB/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 需要util 版本1.0.0projectB 需要util 版本2.0.0,则projectA 将使用2.0.0 版本结束。

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

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

【问题讨论】:

    标签: sbt


    【解决方案1】:

    对我来说,如果我可以让一个项目使用最大的 版本,来自它自己的依赖项和(递归地)它的 依赖项的依赖项,但不会高于此。

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

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

    这已经是默认行为了。

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

    【讨论】:

    • 太棒了!并感谢您的链接。我习惯了 Maven,我相信它采用最接近的依赖项指定的版本。这种行为要好得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2018-04-16
    • 2020-09-08
    • 1970-01-01
    • 2019-06-15
    • 2016-07-19
    相关资源
    最近更新 更多