1

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

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

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

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, но когда я выбираю продлить его это все еще красный и показывая «Не удается разрешить ...'- ошибку.

Finds the trait

Still red if I choose it

Счастливый для любого вида обратной связи! Благодаря

+0

Вы получаете сообщение об ошибке от компилятора в IntelliJ или при запуске «sbt compile» ? –

+0

@RadoBuransky без ошибок от компилятора. Хорошо, если я добавлю «extends EntityRepository», он терпит неудачу, потому что EntityRepository не может быть найден. Я имею в виду, я не могу импортировать эту черту в классе EntityRepositoryImpl. – raxelsson

+0

Это то, о чем я прошу.Сообщение об ошибке приходит от IntelliJ или SBT. Возможно, проект IntelliJ не обновляется. Запустите «sbt gen-idea» (если вы используете этот плагин) для регенерации проекта IntelliJ из build.sbt. –

ответ

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.

+0

Спасибо за ваш ответ @Aleksey. Что вы имеете в виду: «Вы можете создавать проекты для него, используя sbt, используя плагин sbt-idea»? Проект идеализирован с идеей игры, но дело в том, что я не могу использовать EntityRepository в инфра-модуле. Это все красное и не даст мне никаких предложений по импорту. Когда я пытаюсь импортировать модуль, ничего не найдено. Но то, что я сделал, должно работать тогда? – raxelsson

+0

Отредактировано мое сообщение с некоторыми изображениями – raxelsson

+0

лучший тест - написать этот фрагмент кода в любом случае, даже если он не компилируется с IntelliJ, а затем в sbt shell run '; clean; компилировать' и посмотреть, компилируется ли он. Не забудьте перезагрузить sbt, если вы внесете какие-либо изменения, связанные с SBT. Вам также может потребоваться регенерировать ваши проекты IntelliJ из sbt, если вы используете плагин 'sbt-idea' с'; gen-idea'. Пожалуйста, сообщите нам, если sbt сможет скомпилировать все проекты. –

Смежные вопросы