【问题标题】:Problems compiling routes after migrating to Play 2.1迁移到 Play 2.1 后编译路由时出现问题
【发布时间】:2013-02-08 01:00:14
【问题描述】:

迁移到 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。

【问题讨论】:

    标签: scala playframework-2.1 cake-pattern


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的建议!不幸的是,它对当前的 Play 路由编译器代码没有帮助,因为它已经硬编码了“除了最后两个之外的所有内容”行为。但是我可以为这个编译器制作一个补丁来处理这种情况。这将是一个不错的小拉请求:)
    【解决方案2】:

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

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

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

    【讨论】:

    • 我设法通过托管实例化让它工作,但它不如 Play 2.0 好。运行时实例化使系统更加脆弱,需要额外的测试。代码也很丑,看看那里:stackoverflow.com/questions/14506891/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    相关资源
    最近更新 更多