18.6. Creating a Project with Subprojects
Problem
You want to configure SBT to work with a main project that depends on other subprojects you’re developing.
Solution
Create your subproject as a regular SBT project, but without a project subdirectory. Then, in your main project, define a project/Build.scala file that defines the dependencies between the main project and subprojects.
This is demonstrated in the following example, which I created based on the SBT Multi-Project documentation:
import
sbt._
import
Keys._
/**
* based on http://www.scala-sbt.org/release/docs/Getting-Started/Multi-Project
*/
object
HelloBuild
extends
Build
{
// aggregate: running a task on the aggregate project will also run it
// on the aggregated projects.
// dependsOn: a project depends on code in another project.
// without dependsOn, you'll get a compiler error: "object bar is not a
// member of package com.alvinalexander".
lazy
val
root
=
Project
(
id
=
"hello"
,
base
=
file
(
"."
))
aggregate
(
foo
,
bar
)
dependsOn
(
foo
,
bar
)
// sub-project in the Foo subdirectory
lazy
val
foo
=
Project
(
id
=
"hello-foo"
,
base
=
file
(
"Foo"
))
// sub-project in the Bar subdirectory
lazy
val
bar
=
Project
(
id
=
"hello-bar"
,
base
=
file
(
"Bar"
))
}
To create your own example, you can either follow the instructions in the SBT Multi-Project documentation to create a main project with subprojects, or clone my SBT Subproject Example on GitHub, which I created to help you get started quickly.
Discussion
Creating a main project with subprojects ...
Get Scala Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.