Scala sbt构建中的子模块未继承依赖覆盖

时间:2018-12-20 07:04:01

标签: scala build dependencies sbt

我有一个父项目A和一个子项目B,它使用scala SBT构建从A继承。父级A依赖于版本为“ l1”的库,该库具有子版本为p1的子库,但是它需要一个版本为p2的子库/程序包的不同版本。父build.sbt中“ dependencyOverrides”中的库版本p2。我需要孩子依赖于相同的库l1,但也依赖于子库版本p2。当前正在发生的情况是,子级继承了l1,而父级中存在p2,但是子级中仅包含库中原来包含的子库的版本p1。我可以看到,如果我在子build.sbt中提供了与父代相同的依赖项覆盖,那么它也可以通过在子代中包含子库版本p2来工作,我想知道是否存在隐式方式来继承依赖项为孩子的父母替代。我的sbt版本是1.8.0,下面是父代的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
)

1 个答案:

答案 0 :(得分:2)

  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)