文档

§聚合反向路由器

在某些情况下,您希望在彼此不依赖的子项目之间共享反向路由器。

例如,您可能有一个 web 子项目和一个 api 子项目。这些子项目可能彼此没有依赖关系,除了 web 项目想要渲染到 api 项目的链接(用于进行 AJAX 调用),而 api 项目想要渲染到 web 的链接(渲染资源的 Web 链接在 JSON 中)。在这种情况下,使用反向路由器会很方便,但由于这些项目彼此不依赖,因此您无法做到。

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)

在此设置中,apiweb 的反向路由器将在 common 项目中生成。同时,apiweb 的正向路由器将继续生成正向路由器,但不会生成反向路由器,因为它们的反向路由器已经在它们依赖的 common 项目中生成,因此它们不需要生成它们。

请注意,common 项目具有明确声明的 Project 类型。这是因为通过 dependsOn 方法和 aggregateReverseRoutes 设置,它与 apiweb 项目之间存在递归引用,因此 Scala 类型检查器需要在递归链中的某个地方有一个明确的类型。

下一步: 提高编译时间


发现文档中的错误?此页面的源代码可以在 这里 找到。阅读完 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区展开讨论。