1

迁移到 Play-2.1 后,我遇到了路由编译器停止为我的路由文件工作的问题。Play-2.0.4 完全没问题,但现在我遇到了构建错误,找不到任何解决方法。

在我的项目中,我使用的是蛋糕模式,因此控制器操作不是通过 可见<package>.<controller class>.<action>,而是通过<package>.<component registry>.<controller instance>.<action>. 新的播放路由编译器正在使用除最后两个之外的所有操作路径组件来形成将在托管源中使用的包名称(据我所知,我可以在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。

4

2 回答 2

2

由于声誉,我无法创建评论。

约定是类和对象以大写开头。此约定也适用于模式匹配。查看一个字符串,包对象和普通对象之间似乎没有区别(除了案例)。我不确定 Play 2.1 如何处理事情,这就是为什么这不是答案而是评论。

于 2013-02-08T07:38:24.057 回答
0

您可以在路由器中尝试新@语法。这允许您从Global类创建一个实例。您仍然可以指定<package>.<controller class>.<action>,但Global您可以从其他地方(例如组件注册表)获取它。

您可以在“托管控制器类实例化”下找到一些额外信息:http ://www.playframework.com/documentation/2.1.0/Highlights

这个演示项目展示了它的用法:https ://github.com/guillaumebort/play20-spring-demo

于 2013-02-09T11:58:24.657 回答