运行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
答案 0 :(得分:2)
在某些情况下,update
任务会解析所有配置的所有依赖关系。 Sbt使用了Ivy,它提升了一个非常有趣的“配置”方面,可以同时单独解决不同的类路径。
Sbt不仅可以解析您的测试类路径,还可以解析运行时,scala-tools(编译器,scaladoc,repl)等。
请阅读:https://ant.apache.org/ivy/history/latest-milestone/terminology.html了解有关Ivy设计的更多信息,这就是为什么sbt会尝试为所有配置立即执行所有解决方案。