【问题标题】:Play Framework: split routes in multiple files without sub projectsPlay Framework:在没有子项目的多个文件中拆分路由
【发布时间】:2013-12-11 06:44:11
【问题描述】:

我的游戏项目很大,路由文件大约 1Mb。现在,当 scala 编译时,由于路由和从我的路由文件创建的反向路由 scala 文件(也很大),我有异常“方法代码太大”。

所以,我需要拆分没有子项目的路由文件。事实上,我不能将我的项目拆分为子项目,因为它的组件是相互依赖的。

我尝试了两种方法:

  • 我添加了一个名为technical.routes的新conf文件,在里面添加一些路由,从“routes”中删除相同的路由,并使用“-> Technical.Routes”导入文件 一切都可以编译,我没有之前的异常,但有些地方出了问题,因为当它停止编译时,它会一遍又一遍地开始......而且永远不会结束。

  • 我添加了一个名为 Technical.routes 的新 conf 文件,在其中添加了一些路由,从“路由”中删除了相同的路由,但我没有将其导入到我的主路由文件中,而是将其添加到了 conf 文件中: “application.router="routes, Technical.routes"”。 但它不起作用,因为这里必须声明一条路由。

请问怎么办?

【问题讨论】:

  • 嗯,第一种方法有效。我从头开始,它奏效了。我在编译命令之前做了一个干净的命令。看来旧的编译文件是我的问题的原因。

标签: playframework playframework-2.0


【解决方案1】:

嗯,第一种方法是有效的。我从头开始,它奏效了。我在编译命令之前做了一个干净的命令。似乎旧的编译文件是我的问题的原因。

请注意,路由文件中的包名称不能重叠。例如。在本例中,technical.routes 文件包含 controllers.technical 中的所有路由,主路由文件不能包含 controllers.technical 包中的任何路由。

conf/routes 内容:

# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

->  /technical technical.Routes

GET     /        controllers.Dashboard.index()

conf/technical.routes内容:

# Routes
# ~~~~

GET     /        controllers.technical.App.index()

【讨论】:

  • 太棒了!仅供参考,如果有更多代码/一个很好的例子,你的答案会更好。
  • 这对我不起作用。能否提供您的路线文件样本?
  • 您需要在您的build.sbt 中添加它以使多个路由文件工作scalacOptions ++= Seq( // Show warning feature details in the console "-feature", // Enable routes file splitting "-language:reflectiveCalls" )
  • Not Working for me getting below error [error] /home/conf/routes:7: object Routes is not a member of package com.store [error] -> /storeDetails com.store.Routes
  • 请注意,拆分路由文件必须放入它们自己的包中,否则您将收到错误 (github.com/playframework/playframework/issues/4430)。一个工作示例:github.com/Enalmada/play-beanstalk
【解决方案2】:

如果您的文件名是 Technical.routes, 在包含文件时,提及 Technical.Routes(大写)。

->后面的参数是url前缀,所以要访问technical.routes文件的任何url,都需要加上前缀。

http://127.0.01/technical/{technical.routes 文件中定义的 url}

【讨论】:

    【解决方案3】:

    以上信息在 play 2.8.x 和 macwire 中均不适合我。分享对我有用的解决方案。

    如果你正在使用一个 sbt 单项目和 DI 并且仍然想使用多个路由文件,你可以像下面那样做。 无需 sbt 多项目设置。

    conf/ 
         routes
         admin.routes
    

    配置/路由:

    GET /index                  controllers.HomeController.index()
    
    ->  /admin admin.Routes
    

    conf/admin.routes:

    GET /index                  controllers.admin.HomeController.index()
    

    在应用程序加载器中, 在构建路线中添加以下内容。

    val adminRouter: admin.Routes = {
            val prefix = "/"
            wire[admin.Routes] //replace it with constructor if you do manual DI
    }
    val router: Routes = {
            val prefix = "/"
            wire[Routes] //replace it with constructor if you do manual DI
    }
    

    用 play 2.8.x 和 macwire 测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2011-11-10
      • 2020-11-09
      • 2016-04-09
      • 1970-01-01
      相关资源
      最近更新 更多