§リバースルーターの集約
相互に依存しないサブプロジェクト間でリバースルーターを共有したい場合があります。
たとえば、web
サブプロジェクトと api
サブプロジェクトがあるとします。これらのサブプロジェクトは、web
プロジェクトが api
プロジェクトへのリンク(AJAX呼び出しを行うため)をレンダリングしたい一方、api
プロジェクトが web
へのリンクをレンダリングしたい(JSONでリソースのwebリンクをレンダリングするため)という点を除いて、相互に依存関係がない場合があります。この状況では、リバースルーターを使用するのが便利ですが、これらのプロジェクトは相互に依存していないため、使用できません。
Playのルートコンパイラーには、共通の依存関係が依存するプロジェクトのリバースルーターを生成し、それらのプロジェクト間でリバースルーターを共有できるようにする機能が用意されています。これは、次のように aggregateReverseRoutes
sbt構成項目を使用して構成します。
lazy val common: Project = (project in file("common"))
.enablePlugins(PlayScala)
.settings(
aggregateReverseRoutes := Seq(api, web)
)
lazy val api = (project in file("api"))
.enablePlugins(PlayScala)
.dependsOn(common)
lazy val web = (project in file("web"))
.enablePlugins(PlayScala)
.dependsOn(common)
この設定では、api
および web
のリバースルーターは、common
プロジェクトの一部として生成されます。一方、api
および web
のフォワードルーターは、引き続きフォワードルーターを生成しますが、リバースルーターは生成しません。これは、リバースルーターが依存している common
プロジェクトで既に生成されているため、それらを生成する必要がないためです。
common
プロジェクトは、Project
型が明示的に宣言されていることに注意してください。これは、dependsOn
メソッドとaggregateReverseRoutes
設定を通じて、それとapi
およびweb
プロジェクトの間に再帰的な参照があるため、Scala型チェッカーが再帰チェーン内のどこかで明示的な型を必要とするためです。
次へ:コンパイル時間の改善
このドキュメントにエラーを見つけましたか?このページのソースコードは こちら にあります。 ドキュメントのガイドライン を読んだら、プルリクエストを自由に投稿してください。質問や共有するアドバイスがありますか?コミュニティフォーラム にアクセスして、コミュニティとの会話を始めましょう。