使用JVM分叉时Grails混合不起作用
升级到Grails2.3.5后,我发现我的混搭只有在JVM分叉关闭时才能工作 我所有的控制器都有这样的代码使用JVM分叉时Grails混合不起作用,grails,grails-2.3,Grails,Grails 2.3,升级到Grails2.3.5后,我发现我的混搭只有在JVM分叉关闭时才能工作 我所有的控制器都有这样的代码 import util.MyMixin @Mixin(MyMixin) class MyController { 其中,MyMixin在src/groovy/util中定义,看起来像 package util class MyMixin { private def aMethod(someArgs) { // do something } } 当Bu
import util.MyMixin
@Mixin(MyMixin)
class MyController {
其中,MyMixin
在src/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分叉代码时,代码当然可以工作
在分叉JVM时,我是否需要做一些特殊的事情来让mixin工作?我之所以使用forking,是因为Grails 2.3.5推荐使用它,而我在没有使用它时遇到了问题:我在使用Grails域对象的mixin时遇到了困难,听到您在使用控制器时遇到了困难,我并不感到惊讶。Grails对域、控制器和服务的管理非常严格,难怪正常的@mixin可能会以某种方式被破坏。我已经成功地通过元类生成器DSL注入方法,如下所示:
targetClass.metaClass {
someMethod { someParam ->
// do something
}
}
你必须自己在所有的目标类中调用它。。。它不像@Mixin那么优雅,但似乎很管用。这是或@Mixin?我不知道有什么不同。我怎么说?进口商品中没有“Mixin”。。。应该有吗?那么我猜您使用的是
groovy.lang.Mixin
。试着用另一个。好的。。。因此,我尝试将grails和groovy Mixin显式地与以下代码一起使用@groovy.lang.Mixin(MyMixin)
和@grails.util.Mixin(MyMixin)
,groovy Mixin在grails Mixin失败时工作。我应该关心这件事吗?解决问题的最好办法是什么?将我的所有mixin更改为显式引用groovy mixin?好吧,现在这很有趣。如今,@groovy.lang.Mixin
和@grails.util.Mixin
都不起作用。