Jak stworzyć aplikację Play 2.2 Scala jako podprojekt SBT

Próbuję utworzyć aplikację Scala składającą się z projektu biblioteki (nazwijmy tocommon), projekt serwera Thrift (nazwijmy toserver) oraz projekt aplikacji internetowej Play (zwanej dalejweb). Wszystkie trzy są napisane w Scali i zbudowane z sbt.

Moja struktura projektu wygląda tak:

myproject/
-common/
  ...
-server/
  ...
-web/
  -app/
  -conf/
  ...
-project/
  -Build.scala
  -build.properties
-build.sbt

Mójbuild.sbt plik (nieco uproszczony) wygląda tak:

import play.Project._

name := "myproject"

version := "1.0-SNAPSHOT"

lazy val common = project

lazy val web = project
    .settings(playScalaSettings: _*)
    .dependsOn(common)

lazy val server = project
    .dependsOn(common)

lazy val root = project.in(file("."))
    .aggregate(common, web, server)

Problem polega na tym, że projekt główny nie jest projektem Play, więcplay polecenie nie działa (z błędem

java.lang.RuntimeException: */*:playRunHooks is undefined.
at scala.sys.package$.error(package.scala:27)

Mogę to naprawić, sprawiając, że projekt roota będzie wyglądał jak projekt Play, jeśli wstawię linięplayScalaSettings poversion wiersz w pliku SBT, ale mam inny problem:play run komenda próbuje uruchomić projekt root, a nieweb podprojekt. Oczywiścieplay run polecenie nie działa po uruchomieniu wweb podkatalog, ponieważ nie ma tam pliku SBT opisującego projekt i jego zależności.

Szukam rozwiązania, które pozwoli mi zachować tę strukturę projektu (co oznacza, że ​​projekt Play jest jednym z wielu podprojektów w mojej aplikacji), zachowując jednocześnie wszystkie zalety struktury Play, takie jak aktualizacje na gorąco, gdy zmiany kodu (nawet kodu w zależnych bibliotekach) lubićcommon).

Myślałem, że znalazłem rozwiązanie, uruchamiającplay aby uzyskać interaktywną konsolę, a następnie

 project web
 run

To działa, ale nie działa w linii poleceń.play web/run z jakiegoś powodu działa na poziomie głównymrun polecenie, które jak wspomniano powyżej, nie działa, ponieważ aplikacja główna nie jest aplikacją Play.

Uwaga: Podobne pytanie zostało zadane wcześniej w kontekście Play 2.0 atPlay Framework jako SBT Non-Root Module, ale odpowiedź nie jest zadowalająca, ani też nie uważam, że nadal jest prawidłowa, jeśli chodzi o grę 2.2.

questionAnswers(2)

yourAnswerToTheQuestion