这是一个令人困惑的情况,似乎应该很简单。
我正在使用Play 2.3.4 在我的路线文件中,我有:
GET / controllers.Documentation.index
GET /assets/*file controllers.Assets.at(path="/public", file)
我的文档控制器:
object Documentation extends Controller {
def index = Action { Ok(views.html.documentation()) }
}
我的模板documentation.scala.html
:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css"
href="@routes.Assets.at("stylesheets/main.css")">
</head>
</html>
这都是编译,但当我尝试访问路由/
时,我得到一个包含以下消息的堆栈跟踪:
Execution exception[[RuntimeException: java.lang.NoSuchFieldError: Assets]]
如果模板中引用的routes
对象没有Assets
字段,这似乎是可能的,但是我无法在文档中找到这个应该有的提示发生。
奇怪的是,如果我尝试在模板中使用at
的双参数形式:
<link rel="stylesheet" type="text/css"
href="@routes.Assets.at("public", "stylesheets/main.css")">
...我收到编译错误too many arguments for method at: (file: String)play.api.mvc.Call
。就好像Assets
在编译时定义,但不是在运行时定义。
发生了什么事?