首页 > 解决方案 > Scala sbt build 中的子模块未继承依赖项覆盖

问题描述

我有一个父项目 A 和一个从 A 继承的子项目 B,使用 scala SBT 构建。
父 A 依赖于一个版本为“l1”的库,该库有一个版本为 p1 的子库,但它需要一个版本为 p2 的不同版本的子库/包。为了实现这一点,我在 parent
中包含了子库版本 p2 。 我需要孩子依赖于同一个库 l1,但也依赖于子库版本 p2。目前发生的事情是 l1 由子级继承,而 p2 存在于父级中,但只有最初在库中的子库的版本 p1 包含在子级中。 我可以看到,如果我在孩子中给予相同的依赖覆盖dependencyOverridesbuild.sbt

build.sbt与在父级中一样,它也通过在子级中包含子库版本 p2 来工作。
我想知道是否有一种隐式方法可以将父项的依赖项覆盖继承给子项。
我的 sbt 版本是 1.8.0 ,以下是 parent 中的子定义build.sbt

//child definition
lazy val child = Project("child",file("child"))
    .dependsOn(parent % "provided->provided;compile->compile;test->test;runtime->runtime")
    .settings(
        name := "child",
        assemblySettings
    )

标签: scalabuilddependenciessbt

解决方案


  1. 不要使用dependencyOverride-libraryDependencies就足够了,并且dependencyOverride引入了一些问题,因为它是供内部使用的
  2. 您可以像共享一样共享库配置assemblySettings
  3. 如果您libraryDependencies在父项目中使用,子项目应继承父项目的版本作为传递依赖项

例子:

val dependencies = libraryDependencies ++= Seq(
  ...
)

val parent = (project in file("parent"))
  .settings(dependencies)
  .settings(assemblySettings)

val parent = (project in file("parent"))
  .dependsOn(parent % "provided->provided;compile->compile;test- 
>test;runtime->runtime")
  .settings(dependencies) // actually unnecessary
  .settings(assemblySettings)

推荐阅读