Play Framework:在没有子项目的情况下拆分多个文件中的路径

时间:2013-11-26 08:19:40

标签: playframework playframework-2.0

我的游戏项目非常庞大,路线文件约为1Mb。现在,当scala编译时,我有一个例外“方法代码太大”,因为路由和反向路由scala文件是从我的路由文件创建的(也很大)。

所以,我需要在没有子项目的情况下拆分我的路径文件。实际上,我无法将项目拆分为子项目,因为它的组件是相互依赖的。

我尝试了两种方法:

  • 我添加了一个名为technical.routes的新配置文件,在里面添加一些路由,从“routes”中删除相同的路由,然后使用“ - > technical.Routes”导入文件 一切都编译好了,我没有先前的异常,但是有些东西是错误的,因为当它停止编译时,它会一遍又一遍地重复......并且永远不会结束。

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

请问怎么办?

3 个答案:

答案 0 :(得分:24)

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

请注意,路径文件中的包名称不能重叠。例如。在此示例中,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()

答案 1 :(得分:4)

如果您的文件名是technical.routes, 在包含文件的同时,请提及技术。路径(上限)。

参数 - >是url前缀,因此要访问technical.routes文件的任何url,需要添加前缀。

http://127.0.01/ 技术 / {在technical.routes文件中定义的网址}

答案 2 :(得分:0)

以上信息都不适用于我在 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 进行测试。