Как я могу переопределить настройки в подпроектах в проекте SBT с несколькими подпроектами - PullRequest
2 голосов
/ 25 февраля 2020

У меня есть проект с подпроектами, добавленными в виде подмодулей git в подкаталогах, каждый из которых имеет свои собственные build.sbt файлы. Проекты root зависят и объединяют эти подпроекты. Как я могу переопределить значение настройки (например, organization или version) внутри этих подпроектов?

lazy val p1 = (project in file("p1"))
  .settings(organization := "xyz.abc") // This does not work :(

lazy val root = (project in file("."))
  .dependsOn(p1)
  .aggregate(p1)

1 Ответ

1 голос
/ 25 февраля 2020

Попробуйте добавить переопределения состояний в onLoad, что означает

типа State => State и выполняется один раз после сборки и загрузки всех проектов.

Например,

lazy val settingsAlreadyOverriden = SettingKey[Boolean]("settingsAlreadyOverriden","Has overrideSettings command already run?")
settingsAlreadyOverriden := false
commands += Command.command("overrideSettings") { state =>
  if (settingsAlreadyOverriden.value) {
    state
  } else {
    Project.extract(state).appendWithSession(
      Seq(
        settingsAlreadyOverriden := true,
        subprojectA / organization := "kerfuffle.org",
      ),
      state
    )
  }
}

onLoad in Global := {
  ((s: State) => { "overrideSettings" :: s }) compose (onLoad in Global).value
}

settingsAlreadyOverriden необходимо для Предотвращение рекурсивного onLoad выполнения # 3544

Смежные вопросы

...