Как переопределить настройку/задачу подпроекта в проекте 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` а>