为什么当只有一个更改时,sbt会解决所有依赖关系?

时间:2013-06-21 16:31:27

标签: scala sbt ivy

当我更改项目的一个依赖项时,sbt会运行所有依赖项的解析(不仅仅是针对已更改的依赖项)。在多模块项目中为每个项目进行冗余分辨时,这是特别耗时的。

为什么sbt会做出这样的冗余解决方案?有没有办法让解决方案变得更聪明?

1 个答案:

答案 0 :(得分:1)

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

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