我尝试使用标准路由文件conf/routes
提供可以包含在Play应用程序中的模块特定路由:
-> /psmod1 com.escalesoft.psmod1.ctrl.Routes
获得编译错误:
类型 Psmod1Assets 不是软件包的成员 com.escalesoft.psmod1.ctrl
为实现这一目标,我按照Assets and controller classes should be all defined in the controllers.admin package
官方文档中的说明执行了两个步骤1。在自己的包中定义资产和控制器类
将资产类Psmod1Assets.scala
定义为:
package com.escalesoft.psmod1.ctrl import play.api.http.LazyHttpErrorHandlerobjectclass Psmod1Assets extends controllers.AssetsBuilder(LazyHttpErrorHandler)
上述对象定义按类替换修复了问题
2。拆分路线文件
将模块特定的路径文件/conf/com.escalesoft.psmod1.ctrl.routes
定义为:
# Routes
# Home page
GET / com.escalesoft.psmod1.ctrl.Application.index
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file com.escalesoft.psmod1.ctrl.Psmod1Assets.versioned(path="/public", file: Asset)
如果您愿意,可以在github上检查或克隆我的小测试项目的代码:
git clone -b routing_issue https://github.com/refond/psmod1.git
项目使用标准controllers.Assets
配置为。
转到/conf/com.escalesoft.psmod1.ctrl.routes
文件(在com.escalesoft.psmod1.ctrl.routes处查看)并将controllers.Assets
行替换为com.escalesoft.psmod1.ctrl.Psmod1Assets
,以重现编译错误。
我已经检查了以下资源:
答案 0 :(得分:0)
资产类 Psmod1Assets.scala定义必须是......类不是对象:
package com.escalesoft.psmod1.ctrl import play.api.http.LazyHttpErrorHandler class Psmod1Assets extends controllers.AssetsBuilder(LazyHttpErrorHandler)
这与Play 2.4推荐的InjectedRoutesGenerator设置有关,该设置要求构建的Assets是一个受益于依赖注入的类。请参阅ScalaRouting#Dependency-Injection
上的官方文档请注意,官方文档似乎与此更改并不完全一致,但可能仍然指出object
而不是class
:
https://www.playframework.com/documentation/2.4.x/SBTSubProjects#Assets-and-controller-classes-should-be-all-defined-in-the-controllers.admin-package
我在问题描述中提到的github上的小型测试项目未更新为使用自定义com.escalesoft.psmod1.ctrl.Psmod1Assets