Sbt в чем разница размещения настроек в файле или в общих настройках в мультипроекте - PullRequest
0 голосов
/ 29 января 2019

Вопрос для начинающих, у меня есть многопроектный файл sbt. Есть ли разница, если я поставлю общие настройки в начале файла?Например:

organization := "com.example"
  version := "0.0.1-SNAPSHOT"
  scalaVersion := "2.11.12"
resolvers ++= Seq(
    "Apache Development Snapshot Repository" at "https://repository.apache.org/content/repositories/snapshots/",
    "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/",

    Resolver.mavenLocal
  )
assemblyMergeStrategy in assembly := {
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard
    case x => MergeStrategy.first
  }
lazy val commonSettings  = Seq(  libraryDependencies ++= commonDependencies ++ testingDependencies)
lazy val sharedProject = (project in file(...))
.settings(commonSettings: _*)
val projectA = .....dependsOn(sharedPorject)
val projectB = .....dependsOn(sharedPorject)

Или если я поставлю его в общих настройках

lazy val commonSettings  = Seq(  
organization := "com.example",
  version := "0.0.1-SNAPSHOT",
  scalaVersion := "2.11.12",
resolvers ++= Seq(
    "Apache Development Snapshot Repository" at "https://repository.apache.org/content/repositories/snapshots/",
    "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/",
    Resolver.mavenLocal
  ),
assemblyMergeStrategy in assembly := {
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard
    case x => MergeStrategy.first
  },
libraryDependencies ++= commonDependencies ++ testingDependencies)
lazy val sharedProject = (project in file(...))
.settings(commonSettings: _*)
val projectA = .....dependsOn(sharedPorject)
val projectB = .....dependsOn(sharedPorject)

в чем разница?

1 Ответ

0 голосов
/ 29 января 2019

Любые настройки, определенные без привязки к настройкам конкретного проекта, например .settings(), присоединяются к корневому проекту.

Таким образом, код, подобный этому

organization := "foo"

, такой же, как

lazy val root = (project in file(".")).settings(organization := "foo")

Теперь, если вы определили новый подпроект, такой как common, и добавьте organization

lazy val common = (project in file("common")).settings(organization := "bar")

Это и только у него будет значение organization, установленное на bar.

Это будет иметь место в примере, когда для корневого проекта также определен собственный organization.

lazy val root = (project in file(".")).settings(organization := "foo")

lazy val common = (project in file("common")).settings(organization := "bar")

Это легко проверить с помощью команд sbt "show organization" и sbt "show common/organization".Он напечатает foo и bar соответственно.

Наконец, если вы хотите, чтобы одинаковое значение было определено для всех подпроектов, добавьте настройки в корневой проект для области действия ThisBuild, как в этом примере:

organization in ThisBuild := "foo"

lazy val common = (project in file("common")).settings(???)

Или сохранитенастройки в Seq и применить его ко всем подпроектам и root.Это будет иметь тот же эффект, что и в области действия ThisBuild, но это будет более явным:

val commonSettings = Seq(organization := "foo")

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