2016-04-21 77 views
2

是否有可能在多模块项目的模块之间存在循环依赖关系?sbt:模块之间的循环依赖性?

下面是一个例子:

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

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

即时得到一个错误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-apiservice-impl)。通过这种方式,可以将客户端与服务实现细节解耦

+0

很有意义......谢谢! – Daniel