SBT - мульти проекты зависят от одного родителя - PullRequest
0 голосов
/ 06 марта 2019

У меня есть несколько проектов, которые не зависят друг от друга. Они совместно используют несколько библиотек (реактивмонго, кеш redis, поток akka и т. Д.).

Я хочу создать «родительский» проект SBT, чтобы все «дочерние» проекты наследовали общие библиотеки с одинаковой версией.

Можно ли это сделать в SBT? может кто-нибудь поделиться примером кода / документацией? любая помощь приветствуется :), спасибо.

EDIT:

Чтобы быть более конкретным: У меня есть 2 хранилища в Github (child1, child2).

Я хочу создать 3-й репозиторий с именем «parent», который будет включать в себя один build.sbt, чтобы другие репозитории наследовали от него.

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Сборка нескольких проектов с использованием 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"
       )

Для получения дополнительной информации см. Ссылку https://github.com/pbassiner/sbt-multi-project-example

Надеюсь, это поможет!

1 голос
/ 06 марта 2019

Примерно так должно работать:

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)

Посмотрите здесь https://www.scala -sbt.org / 1.x / docs / Multi-Project.html для получения дополнительной информации.

...