So erstellen Sie eine Play 2.2 Scala-Anwendung als SBT-Unterprojekt

Ich versuche, eine Scala-Anwendung zu erstellen, die aus einem Bibliotheksprojekt besteht (nennen wir diescommon), ein Thrift-Server-Projekt (nennen wir diesserver) und ein Play - Webanwendungsprojekt (im Folgenden alsweb). Alle drei sind in Scala geschrieben und mit sbt gebaut.

Meine Projektstruktur sieht so aus:

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

Meinebuild.sbt Datei (etwas vereinfacht) sieht so aus:

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)

Das Problem dabei ist, dass das Root-Projekt kein Play-Projekt istplay Befehl funktioniert nicht (es kommt zu Fehlern mit

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

Ich kann dies beheben, indem ich das Root-Projekt wie ein Play-Projekt aussehen lasse, wenn ich die Zeile einfügeplayScalaSettings nach demversion Zeile in der SBT-Datei, aber dann habe ich ein anderes Problem: dieplay run Befehl versucht, das Stammprojekt auszuführen, nicht dasweb Teilprojekt. Offensichtlich dieplay run Befehl funktioniert nicht, wenn er in der ausgeführt wirdweb Unterverzeichnis, da dort keine SBT-Datei zur Beschreibung des Projekts und seiner Abhängigkeiten vorhanden ist.

Ich suche nach einer Lösung, die es mir ermöglicht, diese Projektstruktur beizubehalten (dh das Play-Projekt ist eines von vielen Unterprojekten in meiner Anwendung) und gleichzeitig die gesamte Aktualität des Play-Frameworks beizubehalten, z mögencommon).

Ich dachte, ich hätte die Lösung durch Laufen gefundenplay um die interaktive Konsole zu erhalten, und dann

 project web
 run

Das funktioniert, aber es funktioniert nicht in der Befehlszeile.play web/run Aus irgendeinem Grund wird die Root-Ebene ausgeführtrun Befehl, der, wie oben erwähnt, nicht funktioniert, da die Root-Anwendung keine Play-Anwendung ist.

Hinweis: Eine ähnliche Frage wurde zuvor im Zusammenhang mit Play 2.0 unter gestelltSpielen Sie das Framework als SBT-Nicht-Root-Modul, aber die Antwort ist nicht zufriedenstellend, und ich glaube, dass sie ab Play 2.2 noch korrekt ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage