Расширить трейт из другого модуля

У меня есть проект, включающий три модуля.

  • основной
  • домен
  • инфраструктура

В модуле домена у меня есть класс сущности и черта репозитория.

Entity.scala EntityRepository

В модуле инфраструктуры я хочу расширить и реализовать трейт EntityRepository.

EntityRepositoryImpl extends EntityRepository {...}

Но я не знаю, как получить доступ к признаку в мобдуле домена из модуля инфраструктуры.

Я не уверен, что знаю, что делаю, но здесь 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

Теперь внезапно я могу найти EntityRepository в EntityRepositoryImpl, но когда я выбираю его расширение, он все еще красный и показывает ошибку «Не удается разрешить ...».

Находит черту

Все еще красный, если я выберу

Рада любому отзыву! Спасибо


person malmling    schedule 27.01.2014    source источник
comment
Вы получаете сообщение об ошибке от компилятора в IntelliJ или при запуске sbt compile?   -  person Rado Buransky    schedule 28.01.2014
comment
@RadoBuransky нет ошибок компилятора. Хорошо, если я добавлю расширения EntityRepository, это не удастся, потому что EntityRepository не может быть найден. Я имею в виду, что я не могу импортировать этот трейт в класс EntityRepositoryImpl.   -  person malmling    schedule 28.01.2014
comment
Вот о чем я спрашиваю. Является ли сообщение об ошибке исходящим от IntelliJ или SBT. Возможно, проект IntelliJ устарел. Запустите sbt gen-idea (если вы используете этот плагин), чтобы восстановить проект IntelliJ из build.sbt.   -  person Rado Buransky    schedule 28.01.2014


Ответы (1)


Настройка вашего проекта позволяет вам получить доступ к признаку EntityRepository, который находится в подпроекте domain, из любого места подпроекта infra, поскольку infra зависит от domain. Все, что вам нужно сделать, это сослаться на EntityRepository по его полному имени или импортировать пакет, в котором он находится (import com.example.EntityRepository).

Если вы используете IntelliJ, вы можете создавать для него проекты из sbt, используя плагин sbt-idea. То же самое касается Eclipse с sbteclipse-plugin. Таким образом, ваши сгенерированные проекты IDE будут иметь правильные ссылки друг на друга и помогут вам найти свои классы.

Хотя у вас есть один и тот же пакет в двух разных подпроектах SBT, это не проблема. Это не должно вызывать проблем с компиляцией.

Чтобы устранить проблемы, которые могут быть вызваны IDE, хорошим тестом является компиляция с помощью SBT. Выключите запущенный sbt, запустите его снова и запустите ;clean; compile; test в консоли SBT. Если все компилируется нормально (или даже если нет), перегенерируйте свои проекты IntelliJ с помощью gen-idea из консоли SBT. Для всех команд SBT в вашем случае вы должны находиться в проекте root, который, я полагаю, является местоположением по умолчанию при запуске SBT.

person yǝsʞǝla    schedule 28.01.2014
comment
Спасибо за ответ @Aleksey. Что вы имеете в виду, говоря, что вы можете создавать для него проекты с помощью sbt с помощью плагина sbt-idea? Проект идеализирован игровой идеей, но дело в том, что я не могу использовать EntityRepository в инфрамодуле. Он весь красный и не дает мне никаких предложений по импорту. Когда я пытаюсь импортировать модуль, ничего не обнаруживается. Но то, что я сделал, должно сработать? - person malmling; 28.01.2014
comment
Отредактировал мой пост с некоторыми изображениями - person malmling; 28.01.2014
comment
лучший тест - написать этот фрагмент кода в любом случае, даже если он не компилируется с IntelliJ, а затем в оболочке sbt запустить ;clean; compile и посмотреть, компилируется ли он. Не забудьте перезагрузить sbt, если вы вносите какие-либо изменения, связанные с SBT. Вам также может потребоваться повторно сгенерировать проекты IntelliJ из sbt, если вы используете плагин sbt-idea с ;gen-idea. Пожалуйста, дайте нам знать, если sbt может скомпилировать все проекты. - person yǝsʞǝla; 29.01.2014