4

我正在将我的应用程序从 Grails 2.1 迁移到 2.3。迁移后我遇到了很多错误——我想要一些带有 Grails 2.3 和 Spring 集成的示例应用程序。

我做了一些 HelloWorld 示例应用程序,它们运行良好。但即使我在我的应用程序中应用了同样的东西,甚至在一些地方它给出了错误。因为我的应用程序非常大(100mb),而且我使用了大量与 Spring、Hibernate 和许多 Grails 插件的集成。

我没有找到任何类似“从 Grails 2.1 迁移到 Grails 2.3”的代码级文档。我无法从 Grails 或在线找到任何示例应用程序。

Grails 官方文档,都是关于提供 Grails META 信息的。

在我的 main.gsp 229 行中:

<g:include controller="filter" action="tree"/>

Caused by: org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error processing GroovyPageView: Error executing tag <g:include>: Unable to execute include: Request processing failed; nested exception is org.codehaus.groovy.grails.exceptions.GrailsRuntimeException: java.lang.IllegalStateException: Cannot reset buffer after response has been committed
    at org.codehaus.groovy.grails.web.servlet.view.GroovyPageView.createGroovyPageException(GroovyPageView.java:205)
    at org.codehaus.groovy.grails.web.servlet.view.GroovyPageView.handleException(GroovyPageView.java:182)
    at org.codehaus.groovy.grails.web.servlet.view.GroovyPageView.renderWithTemplateEngine(GroovyPageView.java:153)
    at org.codehaus.groovy.grails.web.servlet.view.GroovyPageView.renderMergedOutputModel(GroovyPageView.java:84)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:264)
    at org.codehaus.groovy.grails.web.sitemesh.SpringMVCViewDecorator.render(SpringMVCViewDecorator.java:67)
    ... 51 more
Caused by: org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <g:include>: Unable to execute include: Request processing failed; nested exception is org.codehaus.groovy.grails.exceptions.GrailsRuntimeException: java.lang.IllegalStateException: Cannot reset buffer after response has been committed
    at org.codehaus.groovy.grails.web.pages.GroovyPage.throwRootCause(GroovyPage.java:531)
    at org.codehaus.groovy.grails.web.pages.GroovyPage.invokeTag(GroovyPage.java:475)
    at sun.reflect.GeneratedMethodAccessor379.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1243)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1085)
    at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:909)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:989)
    at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:909)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
    at mycompany_dev_testuserdev_ws3_myapp_grails_app_views_layouts_main_gsp$_run_closure2.doCall(main.gsp:229)
4

2 回答 2

5

将您的 Config.groovy 和 BuildConfig.groovy 文件与空的新 Grails 2.3 应用程序的默认值进行比较。

最显着的变化是插件依赖项不应再在 application.properties 中描述。您还应该确保使用正确版本的 Grails Tomcat、Hibernate 和 Scaffolding 插件。Tomcat & Hibernate 插件版本不再与 Grails 发布版本相同。在 Grails 2.3 中,脚手架功能已被提取到单独的插件中。还要确保为插件使用正确的范围(为 tomcat 构建,为 hibernate 构建运行时)。

还建议开始使用新的基于 maven(使用作为 maven 一部分的 aether 库)的依赖解析。这是通过grails.project.dependency.resolver = "maven"BuildConfig.groovy 中的设置完成的。我在 Grails 2.3 中使用基于 ivy 的旧解析器遇到了奇怪的类加载问题。

我希望这有帮助。

于 2013-05-29T14:43:23.243 回答
3

迁移 Grails 2.3 非常简单-(我的案例,我在 Grails 2.1.4 中使用常春藤,pom)

  1. 做一个示例项目并运行 - 确认它工作。留作参考。
  2. 在您的项目中,将所有 jar 和插件从 pom 移动到 BuildConfig,没有新的格式,就像您已经知道的一样。(注意:不要错过任何一个 jar 或插件,这需要几天时间才能意识到,我犯了同样的错误需要 1 天半。)
  3. 并且,将 jars 和插件配置从 SampleProject -> BuildConfig 复制到您的项目 BuildConfig,如果您的应用程序中也有相同的 jars,请检查并删除旧版本并保留最新版本。
  4. 在 BuildConfig 中复制后
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
 ]

 grails.project.dependency.resolver = "maven" // or ivy
 grails.project.dependency.resolution = {
  1. Grails upgrade
  2. Grails run-app
于 2013-06-05T06:42:39.023 回答