简体   繁体   English

带有Grails渲染插件0.44的IncompatibleClassChangeError

[英]IncompatibleClassChangeError with grails rendering plugin 0.44

I have grails 2.0.4 application with rendering plugin 0.44. 我有渲染插件0.44的grails 2.0.4应用程序。 It works fine in dev environment, however, fails in production with IncompatibleClassChangeError. 它在开发环境中运行良好,但是在生产中由于IncompatibleClassChangeError而失败。

Looked into the jars to see if there are any duplicates or incompatibilities, couldn't trace anything suspicious. 往罐子里看,看是否有重复或不兼容,找不到任何可疑的东西。 Tried with clean war (grails clean, war) but didn't help. 尝试过干净的战争(干净的战争),但没有帮助。

Both production and development test are running similar setup except java minor versions - java 1.6.0_65 (dev test/mac os) and java 1.6.0_30 (production/cent os). 生产和开发测试都运行类似的设置,除了Java次要版本-Java 1.6.0_65(开发测试/ mac os)和java 1.6.0_30(生产/ cent os)。

Any help much appreciated, thanks! 任何帮助,不胜感激,谢谢!

Here is my BuildConfig.groovy: 这是我的BuildConfig.groovy:

plugins{

------

compile ":qrcode:0.3"
compile ":rendering:0.4.4"
}

Here is the stack trace: 这是堆栈跟踪:

    org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Executing action [our function] of controller [com.x.ourcontroller]  caused exception: Runtime error executing action
        at org.grails.jaxrs.web.JaxrsFilter.doFilterInternal(JaxrsFilter.java:46)
        at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
        at java.lang.Thread.run(Thread.java:701)
Caused by: org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Runtime error executing action
        ... 7 more
Caused by: java.lang.reflect.InvocationTargetException
        ... 7 more
Caused by: java.lang.IncompatibleClassChangeError
        at grails.plugin.rendering.document.RenderEnvironment.init(RenderEnvironment.groovy:37)
        at grails.plugin.rendering.document.RenderEnvironment.with(RenderEnvironment.groovy:75)
        at grails.plugin.rendering.document.RenderEnvironment.with(RenderEnvironment.groovy:67)
        at grails.plugin.rendering.document.XhtmlDocumentService.generateXhtml(XhtmlDocumentService.groovy:64)
        at grails.plugin.rendering.document.XhtmlDocumentService.createDocument(XhtmlDocumentService.groovy:34)
        at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:36)
        at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:35)
        at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:65)
        at RenderingGrailsPlugin$_closure3.doCall(RenderingGrailsPlugin.groovy:59)
        at com.xx.yy..
        ... 7 more
2014-03-19 20:55:52,025 [TP-Processor16] ERROR servlet.GrailsDispatcherServlet  - HandlerInterceptor.afterCompletion threw exception
java.lang.IncompatibleClassChangeError
        at org.grails.jaxrs.web.JaxrsFilter.doFilterInternal(JaxrsFilter.java:46)
        at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
        at java.lang.Thread.run(Thread.java:701)
2014-03-19 20:55:52,026 [TP-Processor16] ERROR servlet.GrailsDispatcherServlet  - HandlerInterceptor.afterCompletion threw exception
java.lang.IncompatibleClassChangeError
        at org.grails.jaxrs.web.JaxrsFilter.doFilterInternal(JaxrsFilter.java:46)
        at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)        at java.lang.Thread.run(Thread.java:701)

java.lang.IncompatibleClassChangeError was happening due to a conflict between classes across different plugins with respect to MockHttpServletRequest and MockHttpServletResponse classes coming for jax-rs plugin. 由于针对jax-rs插件的MockHttpServletRequest和MockHttpServletResponse类,不同插件之间的类之间存在冲突,因此发生了java.lang.IncompatibleClassChangeError。 Tried the latest jax-rs plugin (0.9 for 2.0.x grails) which mentions in release notes that these are removed. 尝试了最新的jax-rs插件(对于2.0.x grails为0.9),该插件在发行说明中提到已将其删除。 However, this version of plugin didn't fix the problem. 但是,此版本的插件无法解决问题。 Manually removed the mock directory under jax-rs plugin from the war and repackaging it as a workaround for now. 从战争中手动删除jax-rs插件下的模拟目录,并将其重新打包为暂时的解决方法。 Removing the mock/* files fixed the problem. 删除模拟/ *文件可解决此问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM