- skip in publish := true
-
lazy val docs = project
- .settings(skip in publish := true)
- .dependsOn(allProjects: _*)
+ .dependsOn(allModules)
.in(file("docs"))
+ lazy val `my-library-core` = module
- lazy val core = project
- .in(file("modules/core"))
- .settings(name := "my-library-core")
+ lazy val `my-library-plugin` = module
- lazy val plugin = project
- .in(file("modules/plugin"))
- .settings(name := "my-library-plugin")
- .dependsOn(core)
+ .dependsOn(`my-library-core`)
-
- lazy val allProjects: Seq[ClasspathDep[ProjectReference]] = Seq(
- core,
- plugin
- )
Add the following line to your plugins.sbt
file:
addSbtPlugin("com.alejandrohdezma" % "sbt-modules" % "0.3.2")
Use module
instead of project
to create your SBT modules. Unlike project
, module
expects your modules to live in modules
folder and uses the name of the variable for the project's ID and base folder (just like project
does).
For example, the following SBT configuration:
lazy val `my-library-core` = module
lazy val `my-library-plugin` = module.dependsOn(`my-library-core`)
Would expect the following directory structure:
.
+-- modules
| +-- my-library-core
| +-- src
| +-- my-library-plugin
| +-- src
+-- build.sbt
+-- project
sbt-modules
creates a special variable called allModules
that aggregates all the modules created with module
, so you can pass it along as a dependency to other projects in your build, like:
lazy val documentation = project.dependsOn(allModules)
lazy val `my-library-core` = module
lazy val `my-library-plugin` = module.dependsOn(`my-library-core`)
Important
‼️ TheallModules
variable is created by listing all the directories in themodules
directory so ensure: (1) that all your modules have a corresponding directory insidemodules
and (2) that there are no directories insidemodules
that aren't a module.
Forget about setting skip in publish := true
again. Adding this plugin to your build will disable publishing for all the projects in the build (including the auto-generated root plugin), except for those created with module
.
However, if you also want to exclude any of those created with module
you can always add .settings(skip in publish := true)
.
Example:
// Will not be published
lazy val documentation = project.dependsOn(allmodules)
// Will be published
lazy val `my-library-plugin` = module.dependsOn(`my-library-core`)
// Will be published
lazy val `my-library-core` = module
// Will not be published
lazy val `my-library-util` = module.settings(skip in publish := true)