§リバースルートの統合
いくつかの状況において、互いに依存していないサブプロジェクト間でリバースルートを共有したくなることがあります。
例えば、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
プロジェクトにて既に生成されているため、生成する必要はなく、api
と web
用のリバースルータではなくフォワードルータが生成されます。
common
プロジェクトは明示的にProject
型と宣言されていることに注意してください。dependes
メソッドとaggregateReverseRoutes
設定によって、api
およびweb
プロジェクト間には再帰的な依存関係があるため、Scala の型チェッカは再帰チェーン内にどこかにおいて、明示的な型を必要とします。
Next: コンパイル時間の改善
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。