迁移到Play-2.1之后我遇到了路由编译器停止为我的路由文件工作的问题。 Play-2.0.4完全没问题,但现在我收到了构建错误,无法找到解决方法。
在我的项目中,我正在使用蛋糕模式,因此控制器操作不是通过<package>.<controller class>.<action>
显示,而是通过<package>.<component registry>.<controller instance>.<action>
显示。新的Play路由编译器正在使用除最后两个之外的所有操作路径组件来形成将在托管源中使用的包名称(只要我可以在https://github.com/playframework/Play20/blob/2.1.0/framework/src/routes-compiler/src/main/scala/play/router/RoutesCompiler.scala中获取代码)。在我的情况下,当<package>.<component registry>
被选为包名时会导致这种情况,这会在构建期间导致错误:
[error] server/target/scala-2.10/src_managed/main/com/grumpycats/mmmtg/componentsRegistry/routes.java:5: componentsRegistry is already defined as object componentsRegistry
[error] package com.grumpycats.mmmtg.componentsRegistry;
我制作了示例项目来演示此问题:https://github.com/rmihael/play-2.1-routes-problem
是否有可能以某种方式解决此问题而不会丢失控制器的蛋糕模式?遗憾的是,由于这个问题,我无法继续使用Play 2.1。
答案 0 :(得分:2)
由于声誉,我无法发表评论。
约定是类和对象以大写字母开头。该约定也适用于模式匹配。看一个字符串,包对象和普通对象之间似乎没有区别(来自案例的appart)。我不确定Play 2.1如何处理事情,这就是为什么这不是答案而是评论。
答案 1 :(得分:0)
您可以在路由器中尝试新的@
语法。这允许您从Global
类创建实例。您仍然会指定<package>.<controller class>.<action>
,但在Global
中,您可以从其他位置(例如组件注册表)获取它。
您可以在“托管控制器类实例化”下找到一些额外信息:http://www.playframework.com/documentation/2.1.0/Highlights
此演示项目显示了它的用法:https://github.com/guillaumebort/play20-spring-demo