是否可能在多模块项目的模块之间存在循环依赖?
以下是一个例子:
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 :(得分:8)
为什么你需要这个?没有构建系统提供对循环依赖的支持,因为在这种情况下不可能维护正确的构建顺序。如果您的模块服务依赖于客户端的一部分,那么您应该将其移到一个单独的模块(通常我们称之为 common ):< / p>
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 )提供单独的子模块被认为是一种很好的做法。这种方式允许将客户端与服务实现细节分离