Grails 1.3.7 / Java 7 兼容性

Posted

技术标签:

【中文标题】Grails 1.3.7 / Java 7 兼容性【英文标题】:Grails 1.3.7 / Java 7 Compatibility 【发布时间】:2013-01-08 18:25:13 【问题描述】:

有没有人幸运地使用 Java 7 运行 Grails 1.3.7 应用程序?我创建了一个全新的 Grails 1.3.7 应用程序并尝试在 Java 7 下运行它。我收到以下错误,但应用程序似乎运行正常。我们有一些 1.3.7 的应用程序我们不愿意升级到 Grails 2.x,所以任何想法都将不胜感激。

Unable to use direct char[] access of java.lang.String
java.lang.NoSuchFieldException: count
    at java.lang.Class.getDeclaredField(Class.java:1899)
    at org.codehaus.groovy.grails.web.util.StringCharArrayAccessor.<clinit>(StringCharArrayAccessor.java:53)
    at org.codehaus.groovy.grails.web.util.StreamCharBuffer.readAsString(StreamCharBuffer.java:531)
    at org.codehaus.groovy.grails.web.util.StreamCharBuffer.toString(StreamCharBuffer.java:552)
    at org.codehaus.groovy.grails.web.pages.FastStringWriter.getValue(FastStringWriter.java:59)
    at org.codehaus.groovy.grails.web.pages.FastStringWriter.toString(FastStringWriter.java:55)
    at org.codehaus.groovy.grails.web.pages.GroovyPageParser.startTag(GroovyPageParser.java:1119)
    at org.codehaus.groovy.grails.web.pages.GroovyPageParser.page(GroovyPageParser.java:801)
    at org.codehaus.groovy.grails.web.pages.GroovyPageParser.generateGsp(GroovyPageParser.java:380)
    at org.codehaus.groovy.grails.web.pages.GroovyPageParser.parse(GroovyPageParser.java:326)
    at org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine.buildPageMetaInfo(GroovyPagesTemplateEngine.java:584)
    at org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine.createTemplate(GroovyPagesTemplateEngine.java:493)
    at org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine.createTemplateWithResource(GroovyPagesTemplateEngine.java:473)
    at org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine.createTemplate(GroovyPagesTemplateEngine.java:246)
    at org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine.createTemplateForUri(GroovyPagesTemplateEngine.java:373)
    at org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine.createTemplateForUri(GroovyPagesTemplateEngine.java:345)
    at org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine.createTemplate(GroovyPagesTemplateEngine.java:262)
    at org.codehaus.groovy.grails.web.servlet.view.GroovyPageView.renderWithTemplateEngine(GroovyPageView.java:146)
    at org.codehaus.groovy.grails.web.servlet.view.GroovyPageView.renderMergedOutputModel(GroovyPageView.java:81)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    at org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.renderViewForUrlMappingInfo(UrlMappingsFilter.java:260)
    at org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterInternal(UrlMappingsFilter.java:189)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.obtainContent(GrailsPageFilter.java:245)
    at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.doFilter(GrailsPageFilter.java:134)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.codehaus.groovy.grails.web.servlet.filter.GrailsReloadServletFilter.doFilterInternal(GrailsReloadServletFilter.java:104)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:69)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:69)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Thread.java:722)

【问题讨论】:

【参考方案1】:

设置JAVA_OPTS系统属性: Windows:SET JAVA_OPTS=-Dstringchararrayaccessor.disabled=true Unix:export JAVA_OPTS=-Dstringchararrayaccessor.disabled=true

【讨论】:

你的意思是设置环境变量吗? 嘿,可能晚了,但我正在尝试运行 grails 仍然使用 nthe 1.3.7 和 java 7 的遗留代码。我尝试了系统属性选项,但它不起作用。仅供参考:使用 Mac 和 Intellij。【参考方案2】:

这很烦人,但可以安全地忽略,并在 2.1.1 和 2.2 中修复 - 有关详细信息,请参阅 https://github.com/grails/grails-core/issues/2359。

【讨论】:

有点相关 - 在使用 maven 构建项目时,我仍然遇到 Grails 2.2 和 JDK 1.7 的问题。请查看我的问题:***.com/questions/15037082/…【参考方案3】:

根据我看到的in the source code,您可以将JVM 属性stringchararrayaccessor.disabled 设置为true

【讨论】:

这适用于 grails 1.3.6 和 java7。此类的意图似乎与性能相关,因此是否有明显影响还有待观察。 如何设置这个属性? 我试过的任何语法都不起作用,例如-Dstringchararrayaccessor.disabled=true。有什么想法吗?【参考方案4】:

修复在启动 Collabnet Subversion Edge Server 4.x 时观察到相同问题的人们。

猜测添加 JAVA_OPTS=-Dstringchararrayaccessor.disabled=true 的正确位置,不是 csvn 启动脚本,而是 tanukisoft wrapper conf。

另外,编辑 $csvn_home/data/conf/csvn-wrapper.conf 并添加,

wrapper.java.additional.x=-Dstringchararrayaccessor.disabled=true

(其中 x 在序列中的下一个未使用)

【讨论】:

以上是关于Grails 1.3.7 / Java 7 兼容性的主要内容,如果未能解决你的问题,请参考以下文章

Grails 1.3.7 - build.xml 在哪里?

为啥我无法使用 grails 框架 1.3.7 中安装的 spring security 和 weceem 插件登录

如何在 grails 1.3.7 中记录 sql

Grails 2.4.4 与 Java 8 的兼容性

如何使 MySQL 在 grails 2.0 上运行

Grails 数据源异常