Ameen
Ameen

Reputation: 137

SBT - multi projects depend on one parent

I have multiple projects that is independent of each other. They share multiple libraries (reactivemongo, redis cache, akka stream, etc...).

I want to build a "parent" SBT project so all of the "child" projects inherit the shared libraries with same version.

Can this be done in SBT ? can someone share a code example/documentation ? any help is appreciated :), Thanks.

EDIT:

To be more specific: I have 2 repositories in Github (child1, child2).

I want to create a 3rd repository called "parent", which will include one build.sbt so other repositories inherit from it.

Upvotes: 0

Views: 592

Answers (2)

KZapagol
KZapagol

Reputation: 928

Multi project build using sbt.

     lazy val global = project
      .in(file("."))
      .settings(settings)
      .aggregate(
        common,
        project1,
        project2
     )
    lazy val common = project
      .settings(
       name := "common",
       settings,
       libraryDependencies ++= commonDependencies
    )
    lazy val project1 = project
     .settings(
      name := "multi1",
      settings,
      libraryDependencies ++= commonDependencies ++ Seq(
        "org.apache.parquet" % "parquet-avro" % "1.7.0",
        "org.apache.kafka" % "kafka-clients" % "0.10.1.0"
      )
    )
     .dependsOn(
        common
      ) 
    lazy val project2 = project
      .settings(
       name := "multi2",
       settings,
       libraryDependencies ++= commonDependencies ++ Seq(
         "org.scalikejdbc" %% "scalikejdbc" % "2.0.0"
        )
      )
      .dependsOn(
        common
       )

     lazy val commonSettings = Seq(
          scalacOptions ++= compilerOptions,
          resolvers ++= Seq(
          "Local Maven Repository" at "file://" + Path.userHome.absolutePath + 
              "/.m2/repository",
           Resolver.sonatypeRepo("releases"),
            Resolver.sonatypeRepo("snapshots")
        )
      )

      lazy val commonDependencies = Seq(
          "org.slf4j" % "slf4j-simple" % "1.7.25",
          "com.zaxxer" % "HikariCP" % "2.5.1"
          "com.oracle" % "ojdbc6" % "11.2.0.4"
       )

Please refer link https://github.com/pbassiner/sbt-multi-project-example for more info

Hope it will help!

Upvotes: 2

mfirry
mfirry

Reputation: 3692

Something like this should work:

lazy val commonSettings = libraryDependencies ++= Seq(
  "org.reactivemongo" %% "reactivemongo" % "0.16.3"
)

lazy val moduleA = (project in file("moduleA"))
  .settings(commonSettings)

lazy val moduleB = (project in file("moduleB"))
  .settings(commonSettings)

lazy val root = (project in file(".")).settings()
  .aggregate(moduleA, moduleB)

Have a look here https://www.scala-sbt.org/1.x/docs/Multi-Project.html for more.

Upvotes: 1

Related Questions