2016-12-04 2 views
2

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

~/проекты/бэкенд/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) 

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

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

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

Похожие:
How to define build-scoped settings in multi-project .sbt builds?
Setting javac options for SBT dependencies
Use common settings in SBT `RootProject`

ответ

1

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

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

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