2015-07-29 2 views
1

Я работал с этими документами: https://www.playframework.com/documentation/2.4.x/SBTSubProjects и разделил большой проект в основном и вспомогательном модулях.Play Framework [2.4.x] Работа с дополнительными модулями

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

Теперь я хочу создать второй подмодуль.

Назовем основной модуль ROOT, и мы можем подмодуль A ModA и подмодуль B ModB.

ROOT будет зависеть от Moda и MODB

Moda не зависит от ничего

MODB будет зависеть от Moda

Будет ли это более изящным (читай: ремонтопригодны) иметь Moda и MODB быть братья или сестры, или это элегантно, чтобы иметь цепочку подмодулей, указывающую поток наследования?

ROOT -> MODB -> Moda

Это позволит получить беспорядок (МЭО), если (когда) мы добавим MODC и Modd и т.д., так что я надеюсь, что мы можем сделать это с помощью модели братьев и сестер.

Большая часть магии появляется здесь, я считаю,:

lazy val moduleA = (project in file("modules/ModA")).enablePlugins(PlayScala) 

lazy val ROOT = (project in file(".")) 
    .enablePlugins(PlayScala).dependsOn(ModA).aggregate(ModA) 

Я полагаю, что я могу приковать dependsOn и aggregate вызовы.

lazy val moduleA = (project in file("modules/ModA")).enablePlugins(PlayScala) 

lazy val moduleB = (project in file("modules/ModB")).enablePlugins(PlayScala) 

    lazy val ROOT = (project in file(".")) 
.enablePlugins(PlayScala).dependsOn(ModA) 
.aggregate(ModA).dependsOn(ModB).aggregate(ModB) 

Использование модели братьев и сестер, как будет объявлена ​​зависимость ModB от ModA? (Предполагается, что в build.sbt из MODB)

lazy val moduleA = (project in file("modules/ModA")).enablePlugins(PlayScala) 

lazy val ROOT = (project in file(".")) 
    .enablePlugins(PlayScala).dependsOn(ModA).aggregate(ModA) 

ответ

1

Это должно работать нормально:

lazy val moduleA = (project in file("modules/ModA")).enablePlugins(PlayScala) 

lazy val moduleB = (project in file("modules/ModB")).enablePlugins(PlayScala).dependsOn(moduleB) 

    lazy val ROOT = (project in file(".")) 
.enablePlugins(PlayScala).dependsOn(moduleB) 

Это транзитивно зависит от мод А. Заметим также, что dependsOn и агрегат должен ссылаться на имя ленивого Вэл, а не имя папки.

Я не думаю, что вам действительно нужен агрегат в этом случае, поскольку у вас есть зависимости. вот более сложный пример с обоих агрегатных и нескольких зависимостей:

lazy val moduleA = (project in file("modules/ModA")).enablePlugins(PlayScala) 

lazy val moduleC = (project in file("modules/ModC")).enablePlugins(PlayScala) 

lazy val moduleB = (project in file("modules/ModB")).enablePlugins(PlayScala).dependsOn(moduleB) 

lazy val myapp = (project in file("myapp")).enablePlugins(PlayScala).dependsOn(moduleB, moduleC) 

lazy val batch = (project in file("batch")).enablePlugins(PlayScala).dependsOn(moduleB) 

lazy val ROOT = (project in file(".")) 
.aggregate(myapp, batch) 

Таким образом, верхнего уровня (корень) фактически не имеет код и не зависит от кого-либо, он накапливает вам веб-приложение, и это компаньон партии которые оба зависят от ModB, который сам зависит от ModA