2016-04-21 76 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