scala - Scala sbt build 中的子模块未继承依赖项覆盖
问题描述
我有一个父项目 A 和一个从 A 继承的子项目 B,使用 scala SBT 构建。
父 A 依赖于一个版本为“l1”的库,该库有一个版本为 p1 的子库,但它需要一个版本为 p2 的不同版本的子库/包。为了实现这一点,我在 parent
中包含了子库版本 p2 。
我需要孩子依赖于同一个库 l1,但也依赖于子库版本 p2。目前发生的事情是 l1 由子级继承,而 p2 存在于父级中,但只有最初在库中的子库的版本 p1 包含在子级中。
我可以看到,如果我在孩子中给予相同的依赖覆盖dependencyOverrides
build.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
)
解决方案
- 不要使用
dependencyOverride
-libraryDependencies
就足够了,并且dependencyOverride
引入了一些问题,因为它是供内部使用的, - 您可以像共享一样共享库配置
assemblySettings
- 如果您
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)
推荐阅读
- javascript - 我想在我的网页(Wordpress)上实现一个视频文件,并使其在文件大小方面做出响应,以减少加载时间
- typescript - 如何从 react native 调用 C++ 方法?
- php - Laravel - orderBy 不处理关系收集
- bash - 为什么在使用 -t 选项移动具有特定目录位置的文件时,详细模式下的 mv 命令会打印“重命名”而不是“已移动”?
- django - 如何在 Django Serializer 中按用户 ID 检索所有模型数据?
- xcode - Flutter xcode 发布签名问题
- android - Bottomnavigationview.selectedlistener 内存泄漏
- python - 单击另一个 CSS 包装器中的链接 - Selenuim Python
- r - 为什么因子不包含在一阶差分模型中?
- c++ - 联合铸造初始化和引用内部结构