Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SBT Test-Dependencies in Multiprojects: Make the Test-Code Available to Dependent Projects

Tags:

testing

scala

sbt

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 image 644
Gamlor Avatar asked Nov 19 '11 12:11

Gamlor


People also ask

Which is the correct way to add dependencies in SBT file?

If you have JAR files (unmanaged dependencies) that you want to use in your project, simply copy them to the lib folder in the root directory of your SBT project, and SBT will find them automatically.

How do we specify library dependencies in SBT?

The libraryDependencies key Most of the time, you can simply list your dependencies in the setting libraryDependencies . It's also possible to write a Maven POM file or Ivy configuration file to externally configure your dependencies, and have sbt use those external configuration files.

What is provided dependency in SBT?

sbt file. The “provided” keyword indicates that the dependency is provided by the runtime, so there's no need to include it in the JAR file.

Where are dependencies downloaded in SBT?

All new SBT versions (after 0.7. x ) by default put the downloaded JARS into the . ivy2 directory in your home directory. If you are using Linux, this is usually /home/<username>/.


1 Answers

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.

like image 168
retronym Avatar answered Sep 28 '22 03:09

retronym