- 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
‼️ TheallModulesvariable is created by listing all the directories in themodulesdirectory so ensure: (1) that all your modules have a corresponding directory insidemodulesand (2) that there are no directories insidemodulesthat 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)