SBT Test-Dependencies in Multiprojects: Make the Test-Code Available to Dependent Projects
I've a SBT multi-project where some projects have dependencies to each other. Like this:
lazy val coreProject: Project = Project(
id = "core-project",
base = file("./core-project"),
// other stuff
))
lazy val extensions: Project = Project(
id = "extensions",
base = file("./extensions"),
dependencies = Seq(coreProject)
)
Now I have some test-code in the 'core' project in the test-folder. There are also stuff like mocks and test-utilities. Now I would like to use those test utilities in the tests of the extensions. For production code this works, since I've declared a dependency. However it seems that dependency doesn't hold for the tests. When I run the tests I get compilation error for missing classes. Those classes are from the test-code in the core-project.
How can I tell sbt that the dependency also should include the test-code for the test-scope? So that I can reuse my mocks in the test-code of the 'exension'-project?
Like so:
dependencies = Seq(coreProject % "compile->compile;test->test")
This is discussed in the section "Per-configuration classpath dependencies" in then Getting-Started-Multi-Project guide.
You can also do this with a .dependsOn(coreProject % "compile->compile;test->test")
after the initial project declaration.
lazy val coreProject = Project("core-project")
lazy val extensions = Project("extensions").dependsOn(coreProject % "compile->compile;test->test")