#grails #upgrade
#grails #Обновление
Вопрос:
Я пытаюсь обновить приложение Grails с 1.0.3 до 1.3.7.
Я создал проект Grails 1.3.7 и сделал все возможное, чтобы скопировать старые классы и другие файлы в новый проект. Конечно, что-то пошло не так:
$ grails run-app
<--snip-->
Running Grails application..
2011-10-20 13:37:47,195 [main] ERROR context.GrailsContextLoader - Error executing bootstraps:
Error creating bean with name 'grailsApplication' defined in ServletContext resource [/WEB-INF/applicationContext.xml]:
Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'grailsApplication' defined in ServletContext resource [/WEB-INF/applicationContext.xml]:
Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
at java.security.AccessController.doPrivileged(Native Method)
at org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:212)
at grails.web.container.EmbeddableServer$start.call(Unknown Source)
at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy:158)
at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy)
at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280)
at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
at _GrailsRun_groovy$_run_closure5.doCall(_GrailsRun_groovy:149)
at _GrailsRun_groovy$_run_closure5.call(_GrailsRun_groovy)
at _GrailsRun_groovy.runInline(_GrailsRun_groovy:116)
at _GrailsRun_groovy.this$4$runInline(_GrailsRun_groovy)
at _GrailsRun_groovy$_run_closure1.doCall(_GrailsRun_groovy:59)
at RunApp$_run_closure1.doCall(RunApp.groovy:33)
at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
at gant.Gant.withBuildListeners(Gant.groovy:427)
at gant.Gant.this$2$withBuildListeners(Gant.groovy)
at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
at gant.Gant.dispatch(Gant.groovy:415)
at gant.Gant.this$2$dispatch(Gant.groovy)
at gant.Gant.invokeMethod(Gant.groovy)
at gant.Gant.executeTargets(Gant.groovy:590)
at gant.Gant.executeTargets(Gant.groovy:589)
Caused by: java.lang.reflect.MalformedParameterizedTypeException
at java.lang.Class.getGenericInterfaces(Class.java:788)
... 24 more
Если вы просмотрите эту трассировку стека, вы не найдете ссылок на код моего приложения, что затрудняет отслеживание.
Мне нужны некоторые предложения о том, что я мог бы проверить, что могло вызвать эту ошибку. Вот мой, applicationContext.xml
который, похоже, вряд ли является проблемой:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
<description>Grails application factory bean</description>
<property name="grailsDescriptor" value="/WEB-INF/grails.xml" />
<property name="grailsResourceLoader" ref="grailsResourceLoader" />
</bean>
<bean id="pluginManager" class="org.codehaus.groovy.grails.plugins.GrailsPluginManagerFactoryBean">
<description>A bean that manages Grails plugins</description>
<property name="grailsDescriptor" value="/WEB-INF/grails.xml" />
<property name="application" ref="grailsApplication" />
</bean>
<bean id="grailsConfigurator" class="org.codehaus.groovy.grails.commons.spring.GrailsRuntimeConfigurator">
<constructor-arg>
<ref bean="grailsApplication" />
</constructor-arg>
<property name="pluginManager" ref="pluginManager" />
</bean>
<bean id="grailsResourceLoader" class="org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean">
<property name="grailsResourceHolder" ref="grailsResourceHolder" />
</bean>
<bean id="grailsResourceHolder" scope="prototype" class="org.codehaus.groovy.grails.commons.spring.GrailsResourceHolder">
<property name="resources">
<value>classpath*:**/grails-app/**/*.groovy</value>
</property>
</bean>
<bean id="characterEncodingFilter"
class="org.springframework.web.filter.CharacterEncodingFilter">
<property name="encoding">
<value>utf-8</value>
</property>
</bean>
</beans>
Помощь очень ценится, и просто дайте мне знать, если потребуется дополнительная информация.
Комментарии:
1. Может быть, отложить эту головную боль до следующего месяца, когда выйдет Grails 2.0? Таким образом, вы не устареете так быстро.
2. Ха-ха, хорошая мысль. Но в моей компании разрешение на переход до 1.3.7 настолько передовое, насколько мы можем разумно надеяться.
Ответ №1:
Из заметок, которые я сделал, когда обновил проект с Grails 1.0.3 до 1.3.7 (возможно, не все эти шаги необходимы):
- Убедитесь, что исходный код вашего проекта находится в пакетах (например, «com.companyname.projectname», а не в пакете по умолчанию)
- Убедитесь, что исходные коды плагинов также находятся в пакетах (например, «org.grails.pluginname», отсутствует в пакете по умолчанию)
- Удалить hibernate.jar из каталога project lib (hibernate теперь является плагином)
- Установив GRAILS_HOME на новую версию, создайте фиктивный проект и скопируйте свежий BuildConfig.groovy в проект, который необходимо обновить
- Запустите «grails upgrade» и ответьте «y» на запросы
Ответ №2:
Загляните в stacktrace.log, возможно, это даст вам лучшее представление о реальной проблеме. Также попробуйте «grails clean» и «grails compile» перед «grails run-app», чтобы узнать, не проблема ли это со старым мусором.
Комментарии:
1.
stacktrace.log
не дало мне никакого реального понимания, это выглядело как тот же stacktrace. И я делалgrails clean
каждый раз. Итак, спасибо за предложения, но безуспешно.