运行sbt compile时,标记为test的依赖项仍然会被解析,即使它们稍后在编译时不再包含在内.看起来这应该只发生在测试期间:编译任务.有没有办法在编译任务期间排除测试依赖关系的解析和下载?
以下是org.mockito#mockito-all依赖项的示例.我把它声明为仅测试:
"org.mockito" % "mockito-all" % "1.9.0" % "test"
但是,当(从我的本地Ivy缓存中清除它并且)运行sbt compile时,它会被不必要地下载:
$sbt编译
从/Users/rbrainard/.sbt/plugins加载全局插件
从/ Users / rbrainard / Development / spitball / project加载项目定义
将当前项目设置为spitball(在构建文件中:/ Users / rbrainard / Development / spitball /)
正在更新{file:/ Users / rbrainard / Development / spitball /} spitball ……
解析org.mockito#mockito-all; 1.9.0 …
下载http://repo1.maven.org/maven2/org/mockito/mockito-all/1.9.0/mockito-all-1.9.0.jar …
[SUCCESSFUL] org.mockito#mockito-all; 1.9.0!mockito-all.jar(2075ms)
完成更新.
[成功]总时间:7秒,2014年5月28日下午4:51:20完成
最佳答案 在sbt中,更新任务解析所有配置的所有依赖项. Sbt使用了Ivy,它提升了一个非常有趣的“配置”方面,能够同时单独解决不同的类路径.
Sbt不仅可以解析您的测试类路径,还可以解析运行时,scala-tools(编译器,scaladoc,repl)等等.
请阅读:https://ant.apache.org/ivy/history/latest-milestone/terminology.html以获取有关常春藤设计的更多信息,这就是为什么sbt会尝试为所有配置立即执行所有分辨率的原因.