【问题标题】:Extend trait from another module从另一个模块扩展特征
【发布时间】:2014-02-18 22:47:08
【问题描述】:

我有一个包含三个模块的项目。

  • 主要
  • 域
  • 基础设施

在域模块中,我有一个实体类和一个存储库特征。

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,但是当我选择扩展它时它仍然是红色并显示“无法解析...”-错误。

很高兴收到任何反馈! 谢谢

【问题讨论】:

  • 您是否从 IntelliJ 中的编译器或运行“sbt compile”时收到错误?
  • @RadoBuransky 编译器没有错误。好吧,如果我添加“扩展 EntityRepository”它会失败,因为找不到 EntityRepository。我的意思是,我无法在 EntityRepositoryImpl 类中导入该特征。
  • 这就是我要问的。错误消息是来自 IntelliJ 还是 SBT。可能是 IntelliJ 项目不是最新的。运行“sbt gen-idea”(如果您正在使用该插件)从 build.sbt 重新生成 IntelliJ 项目。

标签: scala intellij-idea playframework playframework-2.2 multi-module


【解决方案1】:

您的项目设置允许您从infra 子项目中的任何位置访问domain 子项目中的EntityRepository trait,因为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 时的默认位置。

【讨论】:

  • 感谢您的回答@Aleksey。 “您可以使用 sbt 使用 sbt-idea 插件为它生成项目”是什么意思?该项目是理想化的游戏理念,但问题是我不能在基础模块中使用 EntityRepository。都是红色的,不会给我任何导入建议。当我尝试导入模块时,什么也没找到。但是我所做的应该会起作用吗?
  • 用一些图片编辑了我的帖子
  • 最好的测试是编写那段代码,即使它不能用 IntelliJ 编译,然后在 sbt shell 中运行 ;clean; compile 并查看它是否编译。如果您进行任何与 SBT 相关的更改,请不要忘记重新加载 sbt。如果您将sbt-idea 插件与;gen-idea 一起使用,您可能还必须从sbt 重新生成您的IntelliJ 项目。如果 sbt 能够编译所有项目,请告诉我们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
相关资源
最近更新 更多