1

我有一個包含三個模塊的項目。從另一個模塊擴展特質

  • 主要
  • 基礎設施

在域模塊我有一個實體類和庫特徵。

Entity.scala EntityRepository

在基礎設施模塊我要擴展和實現的EntityRepository特質。

EntityRepositoryImpl extends EntityRepository {...} 

但我不知道如何從基礎設施模塊訪問領域mobdule中的特質。

我不知道我知道我在做什麼,但在這裏通過build.sbt。告訴我,如果我在那裏做錯了什麼。

import play.Project._ 

lazy val domain = Project("domain", file("domain")) 

lazy val infra = Project("infrastructure", file("infrastructure")).dependsOn(domain) 

lazy val root = Project("MainModuleName", file(".")).dependsOn(domain, infra) 

name := "AppName" 

version := "1.0" 

playScalaSettings 

現在突然我可以找到EntityRepositoryImpl的EntityRepository但是當我選擇把它擴大它仍然是紅色,呈現出「無法解析...'-錯誤。

Finds the trait

Still red if I choose it

快樂任何形式的反饋! 感謝

+0

在IntelliJ中編譯器出現錯誤,或者運行「sbt compile」 ? –

+0

@RadoBuransky編譯器沒有錯誤。那麼如果我添加「擴展EntityRepository」它會失敗,因爲EntityRepository無法找到。我的意思是,我無法在EntityRepositoryImpl類中導入該特徵。 – raxelsson

+0

這就是我所問的。錯誤消息是來自IntelliJ還是SBT。這可能是IntelliJ項目不是最新的。運行「sbt gen-idea」(如果您使用該插件)從build.sbt重新生成IntelliJ項目。 –

回答

1

你的項目設置允許您訪問EntityRepository特點是在任何地方domain子項目在infra子項目因爲infra取決於domain。您只需按全名引用EntityRepository或導入其所在的軟件包(import com.example.EntityRepository)。

如果您使用IntelliJ,則可以使用sbt-idea插件從sbt爲其生成項目。 Eclipse與sbteclipse-plugin一樣。通過這種方式,您生成的IDE項目可以正確引用對方,並幫助您找到您的課程。

雖然在兩個不同的SBT子項目中有相同的包,但這不是問題。這不應該導致任何編譯問題。

爲了消除可能由IDE引起的問題,一個好的測試是使用SBT進行編譯。關閉運行sbt,重新啓動並在SBT控制檯中運行;clean; compile; test。如果一切正常(或者甚至沒有),請使用SBT控制檯中的gen-idea重新生成IntelliJ項目。對於你的情況下的所有SBT命令,你應該在root項目中,當你啓動SBT時,我認爲它是默認位置。

+0

感謝您的回答@Aleksey。 你的意思是「你可以使用sbt-idea插件使用sbt爲其生成項目」? 該項目是理想化的玩法,但問題是我不能在Infra模塊中使用EntityRepository。這全是紅色的,不會給我任何進口建議。 當我嘗試導入模塊時,找不到任何東西。 但我做了什麼應該工作呢? – raxelsson

+0

編輯我的文章與一些圖像 – raxelsson

+0

最好的測試是無論如何寫這段代碼,即使它不用IntelliJ編譯,然後在sbt shell運行';乾淨;編譯「,看它是否編譯。如果您進行任何SBT相關更改,請不要忘記重新加載sbt。如果你在''gen-idea'中使用'sbt-idea'插件,你可能還必須從sbt重新生成IntelliJ項目。請讓我們知道,如果sbt能夠編譯所有項目。 –