100

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?

pad
  • 41,040
  • 7
  • 92
  • 166
Gamlor
  • 12,978
  • 7
  • 43
  • 70

2 Answers2

109

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.

dalle
  • 18,057
  • 5
  • 57
  • 81
retronym
  • 54,768
  • 12
  • 155
  • 168
  • 1
    Just so others aren't confused here, this is suggesting that you set the dependencies in the Project definition (not the library dependencies). – Ryan Gross Jan 17 '17 at 15:47
  • 1
    For non SBT ninzas, can you show more of the build file please? A definition like `lazy val foo = project.settings(...).dependencies(Seq(bar % "compile->compile;test->test"))` doesn't work. @RyanGross, would you? – Abhijit Sarkar Nov 09 '18 at 05:57
59

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")
0__
  • 66,707
  • 21
  • 171
  • 266
Ryan Gross
  • 6,423
  • 2
  • 32
  • 44
  • 2
    Relevant documentation: https://www.scala-sbt.org/release/docs/Multi-Project.html#Per-configuration+classpath+dependencies – Colin Strong May 06 '20 at 18:11