SBT 0.13.1 ,Scala 2.10.3 。
我们已经实现了一个插件,可以将dependencyOverrides
设置为标准工件版本。我的dependencyOverrides
集合大约有950个工件。并不是说我们拥有所有这些依赖关系,但这是人们需要使用的标准版本。
实施覆盖后,Mac上的sbt update
次(11个子项目的参考项目)(Mac OS 10.7.5,Oracle JDK 1.7.0_45)从 ~30秒到 ~140秒。引用的工件实际上更小,因为它消除了许多不同版本的重复工件。
我在-Xprof
下运行sbt,看看问题是什么,并发现了这个主要区别:
在dependencyOverrides
之前:
Compiled + native Method
3.2% 10 + 0 org.apache.ivy.core.module.id.ModuleRules.getRules
dependencyOverrides
之后:
Compiled + native Method
31.6% 136 + 2 org.apache.ivy.core.module.id.ModuleRules.getRules
Xprof
没有给我调用计数。但是,通过对ModuleRules.getRules
的简短回顾,似乎并没有太多的复杂性。这给了我一个暗示,调用计数可能会飙升。我必须使用不同的剖面仪来获得更好的抓地力。
不幸的是,IntelliJ的Scala / SBT插件不断导致sbt resolve
,用户体验更糟糕。我希望之前遇到过这个问题的其他人能够解决这个问题,或者甚至知道一个解决问题的好办法(除了潜入常春藤代码并解决问题+自己修改常春藤代码)。
提前感谢任何输入。