Play Framework [2.4.x] - 模块路由特定名称失败,“资产不是包的成员”

时间:2015-11-29 16:31:38

标签: playframework module routing playframework-2.4

我尝试使用标准路由文件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.LazyHttpErrorHandler

object class 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上检查或克隆我的小测试项目的代码:

项目使用标准controllers.Assets配置为。 转到/conf/com.escalesoft.psmod1.ctrl.routes文件(在com.escalesoft.psmod1.ctrl.routes处查看)并将controllers.Assets行替换为com.escalesoft.psmod1.ctrl.Psmod1Assets,以重现编译错误。

我已经检查了以下资源:

1 个答案:

答案 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而不是classhttps://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