ryanbrainard
ryanbrainard

Reputation: 6047

Exclude test dependency resolution from `sbt compile`

When running sbt compile, dependencies marked as test are still resolved even though they are not later included later in compilation. It seems like this should only happen during the test:compile task. Is there a way to exclude test dependencies from being resolved and downloaded during the compile task?

Here is an example with the org.mockito#mockito-all dependency. I have it declared as test-only:

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

However, when (clearing it from my local Ivy cache and) running sbt compile, it gets needlessly downloaded:

$ 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

Upvotes: 5

Views: 1232

Answers (1)

jsuereth
jsuereth

Reputation: 5624

In sbt the update task resolves all dependencies for all configurations. Sbt makes use of Ivy, which promotes a very interesting "configuration" aspect to be able to separately resolve disparate classpaths at the same time.

Sbt is not only resolving your test classpath, but also runtime, the scala-tools (compiler, scaladoc, repl) and more.

Please read: https://ant.apache.org/ivy/history/latest-milestone/terminology.html for more information on the design of Ivy, which is why sbt attempts to do all resolution at once for all configurations.

Upvotes: 3

Related Questions