gpt4 book ai didi

SBT 挂起解决依赖关系

转载 作者:行者123 更新时间:2023-12-04 04:30:33 25 4
gpt4 key购买 nike

我们有一个包含 17 个项目的 SBT 0.13.0 多项目构建:1 个叶子项目,15 个依赖于叶子的模块(但不相互依赖),以及 1 个依赖于 15 个模块的聚合器。

这是Build.scala 的一个非常粗略的想法。文件看起来像:

val deps: Seq[Setting[_]] = Seq(libraryDependencies ++= Seq(
"com.foo" % "foo" % "1.0.0",
"com.bar" % "bar" % "1.0.0"
))

val leaf = Project("leaf").settings(deps:_*)

val module1 = Project("module1").dependsOn(leaf).settings(deps:_*)
val module2 = Project("module2").dependsOn(leaf).settings(deps:_*)
...
val module15 = Project("module15").dependsOn(leaf).settings(deps:_*)

val aggregator = Project("aggregator)".dependsOn(
module1,
module2,
...
module15
).settings(deps:_*)

所有这些项目都列出了与 libraryDependencies 完全相同的一组外部依赖项。 .出于某种原因,当我们运行 update聚合器中的命令,每个项目大约需要一分钟(总共约 15 分钟!),即使没有一个新的依赖项需要解析或下载。

更糟糕的是,我们最近又添加了一个依赖项,现在是 update。命令会导致 SBT 膨胀高达约 5GB 的内存,有时会在解析期间完全挂起。我们如何调试这个?

我们尝试使用 YourKit 对其进行分析,它可能是一个阅读鲱鱼,但到目前为止,我们看到的唯一内容是一些 sbt.MultiLogger类花费大量时间在 BufferedOutputStream.flush称呼。

最佳答案

如果您的某些外部依赖项实际上是您自己的库,推送到本地存储库并且它们的版本设置为“最新”,那么这种挂起是预期的。原因是当需要“最新”版本时,ivy 会尝试所有依赖项的所有存储库。由于您的库没有被推送到公共(public)存储库,因此在公共(public)存储库上检查它们以超时结束(显然这是一个 Ivy 问题)。

我尝试复制您的设置并创建了一个带有叶子、15 个模块、聚合器和一些外部依赖项的 sbt 项目。这一切都很快得到解决。你可以在

https://github.com/darkocerdic/sbt-multiproject-resolving

关于SBT 挂起解决依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22264216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com