【问题标题】:Dependency Override not inherited by child modules in Scala sbt buildScala sbt build 中的子模块未继承依赖项覆盖
【发布时间】:2019-05-20 16:36:31
【问题描述】:

我有一个父项目 A 和一个从 A 继承的子项目 B,使用 scala SBT 构建。
父 A 依赖于一个版本为“l1”的库,该库有一个版本为 p1 的子库,但它需要一个版本为 p2 的不同版本的子库/包。
为了实现这一点,我在父 build.sbtdependencyOverrides 中包含了子库版本 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
    )

【问题讨论】:

    标签: scala build dependencies sbt


    【解决方案1】:
    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 2021-03-25
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      相关资源
      最近更新 更多