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

5
当运行时,即使它们在后面的编译中不再被包含,标记为的依赖项仍然会被解析。看起来这只应该在任务期间发生。有没有一种方法可以在任务期间排除依赖项的解析和下载?
这里有一个示例,使用依赖项进行说明,我将其声明为仅限测试:
"org.mockito" %  "mockito-all" % "1.9.0" % "test"

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

$ sbt compile [info] 从 /Users/rbrainard/.sbt/plugins 加载全局插件 [info] 从 /Users/rbrainard/Development/spitball/project 加载项目定义 [info] 将当前项目设置为 spitball(在 build file:/Users/rbrainard/Development/spitball/ 中) [info] 正在更新 {file:/Users/rbrainard/Development/spitball/}spitball... [info] 正在解析 org.mockito#mockito-all;1.9.0 ... [info] 正在下载 http://repo1.maven.org/maven2/org/mockito/mockito-all/1.9.0/mockito-all-1.9.0.jar ... [info] [成功] org.mockito#mockito-all;1.9.0!mockito-all.jar(2075ms) [info] 更新完成。 [success] 总共用时:7秒,已于May 28, 2014 4:51:20 PM完成。

1个回答

3
在sbt中,update任务会解析所有配置的依赖项。Sbt使用Ivy,它促进了非常有趣的"配置"方面,能够同时分别解析不同的类路径。
Sbt不仅会解析测试类路径,还会解析运行时、scala工具(编译器、scaladoc、repl)等等。
请阅读:https://ant.apache.org/ivy/history/latest-milestone/terminology.html以获取有关Ivy设计的更多信息,这就是为什么sbt试图一次性对所有配置进行所有解析的原因。

所以,听起来是个“不行”的答案 :) 只是好奇因为 last update 显示 confs: [compile, runtime,test,...]。那不能更新吗? - ryanbrainard
1
你可以修改 allDependencies 设置来删除你不想要的配置文件的所有依赖项。但在撤销此操作之前,您将无法运行测试。 - jsuereth
啊,听起来正是我在这种情况下需要的。我会试一试。 - ryanbrainard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接