【问题标题】:Grails mixins not working when using JVM forking使用 JVM 分叉时 Grails mixins 不起作用
【发布时间】:2014-02-17 19:28:51
【问题描述】:

升级到 Grails 2.3.5 后,我发现我的 mixin 仅在 JVM 分叉关闭时才能工作。

我所有的控制器都有这样的代码

import util.MyMixin

@Mixin(MyMixin)
class MyController {

MyMixinsrc/groovy/util 中定义,看起来像

package util

class MyMixin {
    private def aMethod(someArgs) {
        // do something
    }
}

BuildConfig.groovy包含以下代码时

forkConfig = [maxMemory: 1024, minMemory: 64, debug: false, maxPerm: 256]
grails.project.fork = [
   test: forkConfig, // configure settings for the test-app JVM
   run: forkConfig, // configure settings for the run-app JVM
   war: forkConfig, // configure settings for the run-war JVM
   console: forkConfig // configure settings for the Swing console JVM
]

然后我得到以下错误

MissingMethodException occurred when processing request:
No signature of method: MyController.aMethod() is applicable for argument types

当我在BuildConfig.groovy 中没有 JVM 分叉代码时,参数类型匹配的地方当然代码可以工作。

在 fork JVM 时,我需要做一些特别的事情来让 mixin 工作吗?我只使用分叉是因为 Grails 2.3.5 推荐它,但我在不使用它时遇到了问题:Grails 2.3.5 requiring "grails clean" after every code change

【问题讨论】:

  • 这是grails 还是groovy @Mixin?
  • 我不知道有什么不同。我该怎么说?带有“mixin”的导入中没有任何内容......应该有吗?
  • 那我猜你正在使用groovy.lang.Mixin。尝试使用另一个。
  • 好的...所以我尝试使用以下代码@groovy.lang.Mixin(MyMixin)@grails.util.Mixin(MyMixin) 显式使用grails 和groovy Mixin,并且当grails mixin 失败时,groovy mixin 工作。我应该担心这个吗?解决问题的最佳方法是什么?更改我所有的 mixin 以明确引用 groovy mixin?
  • 好吧,这很有趣。今天,@groovy.lang.Mixin@grails.util.Mixin 都不工作。

标签: grails grails-2.3


【解决方案1】:

我在使用带有 Grails 域对象的 Mixins 时遇到了困难,听到您在使用 Controller 时遇到了困难,我并不感到惊讶。域、控制器和服务由 Grails 管理得如此繁重,难怪正常的 @Mixins 可能会以某种方式被破坏。我已经成功地通过 metaClass builder DSL 专门注入方法,如下所示:

targetClass.metaClass {
    someMethod { someParam ->
        // do something
    }
}

你必须自己在所有目标类上调用它......它不像@Mixin那么优雅,但它似乎工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2014-02-23
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    相关资源
    最近更新 更多