【问题标题】:Why sbt makes resolution for all dependencies when only one changed?为什么当只有一个改变时,sbt 会解析所有依赖项?
【发布时间】:2013-06-18 20:57:20
【问题描述】:

当我更改项目的依赖项之一时,sbt 会为所有依赖项运行解析(不仅针对已更改的依赖项)。在多模块项目中为每个项目做这样的冗余解析,尤其耗时。

为什么 sbt 做出如此多余的解析?有没有办法让分辨率更智能?

【问题讨论】:

  • 如果依赖项发生了变化,那么新版本也可能更改为它的依赖项,依此类推。唯一安全的做法是重新创建整个依赖树。 (不要忘记创建动态依赖项,将迫使 ivy 不断地重新检查存储库以找出依赖项的最新版本可能是什么)。

标签: scala sbt ivy


【解决方案1】:

主要原因是因为 sbt 需要解决冲突。不仅如此,ivy 还需要经常解析所有 -SNAPSHOT 依赖项,以确保它拥有最新的信息。这是因为,默认情况下,sbt 使用“最新的”冲突解决管理器,而不是 maven 使用的“最近的”。根据我的经验,这会减少工件版本的问题。然而,正如 Mark 所说,这确实意味着它将重新创建整个 dep 树。

sbt 中的所有解析都委托给 ivy。为了让它更智能,你必须为 Ivy 创建钩子或者替换 sbt 使用的依赖管理库。在这种解决方案的情况下,我认为唯一可以做的就是改进缓存,以减少恢复以前缓存的工件信息所需的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多