如何在具有多个子项目的SBT项目中覆盖子项目中的设置

时间:2020-02-24 22:31:00

标签: scala build sbt

我有一个项目,其中子项目作为子目录的git子模块添加到了子目录中,每个独立项目都有自己的build.sbt文件。根项目依赖并聚合这些子项目。如何在这些子项目中覆盖设置值(例如organizationversion)?

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 个答案:

答案 0 :(得分:1)

尝试在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对于Avoiding recursive onLoad execution #3544是必需的

相关问题