SBT: настройка переопределения в проекте с несколькими сборками, зависящем от/агрегации

Как переопределить настройку/задачу подпроекта в проекте SBT с несколькими сборками? Например, вот два очень простых проекта SBT:

~/projects/backend/build.sbt

name := "backend"

// old version of scala
scalaVersion := "2.9.1"

~/mycode/docker_builder/build.sbt

lazy val backend = RootProject(file("~/projects/backend"))

lazy val root = (project in file(".")).
settings(
  // Doesn't work because sub-project already defines name
  name in backend := "sub-overriden",

  // Doesn't override {backend/}backend/*:scalaVersion since backend already defines scalaVersion in Global config
  scalaVersion in backend := "2.10.1",

  // Does define new setting in sub-project: {backend/}backend/test:scalaVersion (because backend did not define scalaVersion in test config)
  scalaVersion in (backend, Test) := "2.10.2"
).
aggregate(sub1)
// dependsOn(sub1)

В приведенном выше примере я пытаюсь переопределить как name, так и scalaVersion, но, как указано в комментариях, корневой проект не может явно переопределить какой-либо параметр/задачу. явно определены в бэкэнд-проекте. Теперь я предполагаю, что это ожидаемое поведение, поскольку RootProject и его родительский ProjectReference указывают на совершенно другую сборку SBT, но если это так, почему нам разрешено добавить в сборку новые настройки, например: scalaVersion in (backend, Test)?

Любые обходные пути или другие решения?

Приведенный выше пример серверного проекта является грубым упрощением — наш фактический серверный проект в нашей команде основан на многопроектном формате с примерно дюжиной или двумя подпроектами и плагинами sbt. Однако, к счастью, я смог воспроизвести проблему со списком выше.

Связано:
Как определить build- настройки области действия в многопроектных сборках .sbt?
Настройка параметров javac для зависимостей SBT
Использовать общие настройки в SBT `RootProject`


person Saad Malik    schedule 04.12.2016    source источник


Ответы (1)


Кажется, нет никакого способа переопределить настройки из подпроекта непосредственно из основной сборки. Когда вы создаете Project, его settings еще даже не содержит определений из build.sbt подпроекта.

Что вы можете сделать, так это вызвать .addSbtFiles(file("overrides.sbt")) (пути разрешаются относительно базового каталога подпроекта), а затем поместить переопределения в этот отдельный файл, который загружается после build.sbt подпроекта.

person szeiger    schedule 23.03.2017
comment
Не могли бы вы привести пример того, что могло бы появиться в этом файле переопределений? - person Dave Lugg; 05.04.2018