在tomcat中部署grails war时类加载器错误

时间:2014-01-13 11:24:54

标签: spring tomcat grails deployment classloader

我正在尝试在测试环境中部署grails应用程序,方法是运行'grails dev war'命令并手动将war部署到Tomcat容器中。该应用程序无法运行,我看到几个错误日志,如下所示:

  

./ logs / catalina.out:2014-01-13 09:18:53,415 [main] ERROR context.GrailsContextLoader - 初始化应用程序时出错:   创建名为'instanceTagLibraryApi'的bean时出错:注入   自动连接依赖失败;嵌套异常是   org.springframework.beans.factory.BeanCreationException:不能   autowire方法:public void   org.codehaus.groovy.grails.plugins.web.api.TagLibraryApi.setGspTagLibraryLookup(org.codehaus.groovy.grails.web.pages.TagLibraryLookup);   嵌套异常是   org.springframework.beans.factory.BeanCreationException:错误   创建名为'gspTagLibraryLookup'的bean:调用init   方法失败;嵌套异常是   org.springframework.beans.factory.BeanCreationException:错误   创建名为'es.indra.nta.UiLayoutsTagLib'的bean:初始化   豆失败;嵌套异常是   org.springframework.beans.ConversionNotSupportedException:失败   转换类型的属性值   'org.apache.catalina.loader.WebappClassLoader'到必需的类型   属性'classLoader'的'groovy.lang.GroovyClassLoader';嵌套   异常是java.lang.IllegalStateException:无法转换值   键入[org.apache.catalina.loader.WebappClassLoader]到必需的类型   [groovy.lang.GroovyClassLoader]属性'classLoader':没有   找到匹配的编辑器或转换策略

我为几个bean得到了同样的错误。我正在使用Grails 2.2.2并尝试使用相同的结果在Tomcat 5.5和7.0中进行部署。如果我使用'grails run-app'代替应用程序顺利运行,因此我怀疑某些与Tomcat相关的配置丢失但不知道配置的内容和位置。

关于我缺少什么的任何想法?。

感谢您的帮助!

大卫。

2 个答案:

答案 0 :(得分:0)

当我升级到Grails 2.2.x(从1.3.7开始)

时,我遇到了类似的问题

application.properties,我有

plugins.tomcat=2.2.x

我必须将其删除并添加grails-app/conf/BuildConfig.groovy

plugins {
    build ':tomcat:2.2.x'
}

它解决了我的问题,我希望它也能解决你的问题。

答案 1 :(得分:0)

我解决了这个问题,我错误地认为我是Tomcat配置问题。我解释一下,如果有人遇到类似的问题:

在我在问题中留下的错误日志中,它引用了我们es.indra.nta.UiLayoutsTagLib开发的内部插件的taglib。检查taglib的代码我意识到我正在使用这个SO帖子中的代码:Configuration of Grails plugin,因此在我的taglib代码中有这个代码:

GroovyClassLoader classLoader = new GroovyClassLoader(getClass().getClassLoader())
config = new ConfigSlurper().parse(classLoader.loadClass('MyWebServicePluginConfig'))

部署WAR时,Tomcat使用其默认的类加载器,而不是找到我的taglib请求的GroovyClassLoader

删除ConfigSlurper的使用并使用我正在使用的配置属性的标记属性(这更有意义)消除了在taglib的代码中使用类加载器的需要并解决了问题。