ドキュメント

§リバースルーターの集約

相互に依存しないサブプロジェクト間でリバースルーターを共有したい場合があります。

たとえば、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型チェッカーが再帰チェーン内のどこかで明示的な型を必要とするためです。

次へ:コンパイル時間の改善


このドキュメントにエラーを見つけましたか?このページのソースコードは こちら にあります。 ドキュメントのガイドライン を読んだら、プルリクエストを自由に投稿してください。質問や共有するアドバイスがありますか?コミュニティフォーラム にアクセスして、コミュニティとの会話を始めましょう。