sbt:模块之间的循环依赖?

Dan*_*iel 3 scala sbt

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

这是一个例子:

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

lazy val service = (project in file("service"))
  .dependsOn(client)
  .settings(...)
Run Code Online (Sandbox Code Playgroud)

我得到一个错误recursive value x needs type,我认为是由于这个递归定义,但不完全确定(可能会有一些其他奇怪的现象导致这种情况).

Vit*_*nko 8

为什么你需要这个?没有构建系统提供对循环依赖的支持,因为在这种情况下不可能维护正确的构建顺序.如果你的模块服务依赖于客户端的一部分,那么你应该把它移到一个单独的模块(通常我们称之为常见):

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(...)
Run Code Online (Sandbox Code Playgroud)

此外,为服务API和服务实现(service-apiservice-impl)提供单独的子模块被认为是一种很好的做法.这种方式允许将客户端与服务实现细节分离