Многомодульный проект SBT 0.13.8 с Playframework 2.4.2

У меня есть простой проект с двумя подмодулями, proja и projb. Proja содержит трейт UserController, используемый в UserControllerImpl внутри projb.

проект на github: https://github.com/aswarcewicz/play-sbt-multimodule

корень build.sbt:

name := """proj"""

version := "1.0-SNAPSHOT"

lazy val proja = Project(id = "proj-a", base = file("modules/proj-a"))
  .enablePlugins(PlayScala)

lazy val projb = Project(id = "proj-b", base = file("modules/proj-b"))
  .enablePlugins(PlayScala)
  .dependsOn(proja)
  .aggregate(proja)

lazy val root = Project(id = "proj", base = file("."))
  .enablePlugins(PlayScala)
  .dependsOn(proja, projb)
  .aggregate(proja, projb)

scalaVersion := "2.11.6"

libraryDependencies ++= Seq(
)

// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator

и ошибка компилятора:

modules/proj-b/app/controllers/UserControllerImpl.scala:5: не найдено: контроллер объекта [ошибка] контроллер импорта._

/modules/proj-b/app/controllers/UserControllerImpl.scala:10: не найдено: тип UserController [ошибка] класс UserControllerImpl расширяет контроллер с помощью UserController {

Я понятия не имею, что может быть не так.


person user2860204    schedule 03.08.2015    source источник


Ответы (3)


У вас есть некоторые ошибки.

Я внесу изменения, необходимые для работы вашего проекта, в следующий репозиторий. https://github.com/martinscmb/play-sbt-multimodule

localhost:9000/test output:
{"user":{"name":"toto","age":25,"email":"[email protected]","isAlive":true,"friend":{"name":"tata","age":20,"email":"[email protected]"}}}
person martinscmb    schedule 05.08.2015

Вы должны изменить свой файл SBT на:

name := """proj"""

version := "1.0-SNAPSHOT"

lazy val root = Project(id = "proj", base = file("."))
  .enablePlugins(PlayScala)
  .aggregate(proja, projb)

lazy val proja = Project(id = "proj-a", base = file("modules/proj-a"))
  .enablePlugins(PlayScala)

lazy val projb = Project(id = "proj-b", base = file("modules/proj-b"))
  .enablePlugins(PlayScala)
  .dependsOn(proja)

scalaVersion := "2.11.6"

libraryDependencies ++= Seq(
)

// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator

Добавьте правильные зависимости и перезагрузите проект.

person Omid    schedule 04.08.2015
comment
Вы пробовали это на проекте с github? Потому что это не работает. - person user2860204; 04.08.2015
comment
Ваш файл SBT был синтаксически неверным, теперь вы можете добавить нужную зависимость - person Omid; 04.08.2015
comment
и вам больше не нужен файл sbt для каждого проекта - person Omid; 04.08.2015

Вы хотите определить модуль commonSettings и использовать его везде:

import sbt.Keys._

lazy val commonSettings = Seq(
  scalaVersion := "2.11.7",
  routesGenerator := InjectedRoutesGenerator,
  version := "1.0-SNAPSHOT"
)

lazy val root = (project in file("."))
    .enablePlugins(PlayScala)
    .settings(commonSettings)
    .settings(Seq(name := """proj"""))
    .dependsOn(`proj-a`, `proj-b`)
    .aggregate(`proj-a`, `proj-b`)

lazy val `proj-b` = (project in file("modules/proj-b"))
  .enablePlugins(PlayScala)
  .settings(commonSettings)
  .dependsOn(`proj-a`).aggregate(`proj-a`)

lazy val `proj-a` = (project in file("modules/proj-a"))
  .enablePlugins(PlayScala)
  .settings(commonSettings)
person Will Sargent    schedule 21.01.2016