§聚合反向路由器
在某些情况下,您希望在彼此不依赖的子项目之间共享反向路由器。
例如,您可能有一个 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)
在此设置中,api
和 web
的反向路由器将在 common
项目中生成。同时,api
和 web
的正向路由器将继续生成正向路由器,但不会生成反向路由器,因为它们的反向路由器已经在它们依赖的 common
项目中生成,因此它们不需要生成它们。
请注意,
common
项目具有明确声明的Project
类型。这是因为通过dependsOn
方法和aggregateReverseRoutes
设置,它与api
和web
项目之间存在递归引用,因此 Scala 类型检查器需要在递归链中的某个地方有一个明确的类型。
下一步: 提高编译时间
发现文档中的错误?此页面的源代码可以在 这里 找到。阅读完 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区展开讨论。