2016-04-21 3 views
2

Возможно ли иметь циклическую зависимость между модулями многомодульного проекта?sbt: циклическая зависимость между модулями?

Вот пример:

lazy val client = (project in file("client")) 
    .dependsOn(service) 
    .settings(...) 

lazy val service = (project in file("service")) 
    .dependsOn(client) 
    .settings(...) 

Im получаю ошибку recursive value x needs type, который я думаю, что из-за этого рекурсивного определения, но не совсем уверен (там могут быть некоторые другие странные явления вызывает это).

+0

можно ли получить полную ошибку компиляции и когда это произошло? – bthuillier

ответ

3

Зачем вам это нужно? Система сборки не поддерживает циклические зависимости, поскольку в этом случае невозможно поддерживать правильный порядок сборки. Если ваш модуль службы зависит от части клиента, то вы должны переместить его в отдельный модуль (обычно мы называем его общим):

lazy val common = (project in file("common")) 

lazy val client = (project in file("client")) 
    .dependsOn(service, common) 
    .settings(...) 

lazy val service = (project in file("service")) 
    .dependsOn(common) 
    .settings(...) 

Кроме того, он рассматривается как хорошая практика имеют отдельные подмодули для API услуг и внедрения услуг (service-api и service-impl). Этот способ позволяет отделить клиента от деталей реализации услуги.

+0

имеет смысл ... спасибо! – Daniel

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