common
ライブラリ プロジェクト (これを と呼びましょう)、Thrift サーバー プロジェクト (これを と呼びましょうserver
)、および Play Web アプリケーション プロジェクト (以下 と呼びます) で構成される Scala アプリケーションを作成しようとしていますweb
。3 つすべてが Scala で書かれており、sbt でビルドされています。
私のプロジェクト構造は次のようになります。
myproject/
-common/
...
-server/
...
-web/
-app/
-conf/
...
-project/
-Build.scala
-build.properties
-build.sbt
私のbuild.sbt
ファイル(少し簡略化)は次のようになります。
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)
これに関する問題は、ルート プロジェクトが Play プロジェクトではないため、play
コマンドが機能しないことです (次のエラーが発生します)。
java.lang.RuntimeException: */*:playRunHooks is undefined.
at scala.sys.package$.error(package.scala:27)
SBT ファイルの行のplayScalaSettings
後に次の行を挿入すると、ルート プロジェクトが Play プロジェクトのように見えるようにすることでこれを修正できますが、別の問題があります。コマンドはサブプロジェクトではなくルート プロジェクトを実行しようとします。サブディレクトリで実行すると、プロジェクトとその依存関係を記述する SBT ファイルがないため、明らかにコマンドは機能しません。version
play run
web
play run
web
このプロジェクト構造を保持できるソリューションを探しています (つまり、Play プロジェクトはアプリケーション内の多くのサブプロジェクトの 1 つです)。同時に、コードが変更されたときのホット アップデートのようなすべての Play フレームワークのホットネス (依存ライブラリのコードも含む) を保持します。のようにcommon
)。
play
実行して対話型コンソールを取得することで解決策を見つけたと思ったのですが、
project web
run
これは機能しますが、コマンド ラインでは機能しません。 play web/run
何らかの理由でルートレベルのrun
コマンドを実行しますが、ルートアプリケーションは Play アプリケーションではないため、上記のように機能しません。
注: Play Frameworkの Play 2.0 のコンテキストで、SBT Non-Root Module として同様の質問が以前に出されましたが、その答えは満足のいくものではなく、Play 2.2 の時点でもまだ正しいとは思いません。