我有一个包含三个模块的项目。
在域模块中,我有一个实体类和一个存储库特征。
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但是当我选择扩展它时它仍然是红色并显示“无法解决......” - 错误。
很高兴获得任何反馈! 感谢
答案 0 :(得分:1)
您的项目设置允许您从EntityRepository
子项目中的任何位置访问domain
子项目中的infra
特征,因为infra
取决于domain
。您需要做的就是以全名引用EntityRepository
或导入其所在的包(import com.example.EntityRepository
)。
如果您使用IntelliJ,您可以使用sbt-idea
插件从sbt为其生成项目。使用sbteclipse-plugin
的Eclipse也是如此。这样生成的IDE项目就可以相互正确引用,并帮助您找到类。
虽然您在两个不同的SBT子项目中拥有相同的包,但这不是问题。这不应该导致任何编译问题。
为了消除可能由IDE引起的问题,一个好的测试是使用SBT进行编译。关闭运行sbt,重新启动它并在SBT控制台中运行;clean; compile; test
。如果所有内容编译都很好(或者即使它没有)从SBT控制台使用gen-idea
重新生成IntelliJ项目。对于您的所有SBT命令,您应该在root
项目中,当我启动SBT时,我认为该项目是默认位置。