从`sbt compile`中排除测试依赖项解析

时间:2014-05-28 23:56:43

标签: scala sbt ivy

运行sbt compile时,标记为test的依赖关系仍然会被解析,即使它们稍后在编译时不再包含在内。看起来这应该只发生在test:compile任务期间。有没有办法在test任务期间排除compile依赖关系的解析和下载?

以下是org.mockito#mockito-all依赖关系的示例。我把它宣布为仅测试版:

"org.mockito" %  "mockito-all" % "1.9.0" % "test"

然而,当(从我的本地常春藤缓存中清除它)运行sbt compile时,它会被不必要地下载:

$ sbt compile [info] Loading global plugins from /Users/rbrainard/.sbt/plugins [info] Loading project definition from /Users/rbrainard/Development/spitball/project [info] Set current project to spitball (in build file:/Users/rbrainard/Development/spitball/) [info] Updating {file:/Users/rbrainard/Development/spitball/}spitball... [info] Resolving org.mockito#mockito-all;1.9.0 ... [info] downloading http://repo1.maven.org/maven2/org/mockito/mockito-all/1.9.0/mockito-all-1.9.0.jar ... [info] [SUCCESSFUL ] org.mockito#mockito-all;1.9.0!mockito-all.jar (2075ms) [info] Done updating. [success] Total time: 7 s, completed May 28, 2014 4:51:20 PM

1 个答案:

答案 0 :(得分:2)

在某些情况下,update任务会解析所有配置的所有依赖关系。 Sbt使用了Ivy,它提升了一个非常有趣的“配置”方面,可以同时单独解决不同的类路径。

Sbt不仅可以解析您的测试类路径,还可以解析运行时,scala-tools(编译器,scaladoc,repl)等。

请阅读:https://ant.apache.org/ivy/history/latest-milestone/terminology.html了解有关Ivy设计的更多信息,这就是为什么sbt会尝试为所有配置立即执行所有解决方案。