【问题标题】:Class loader error when deploying a grails war in tomcat在 tomcat 中部署 grails 战争时出现类加载器错误
【发布时间】:2014-01-13 11:24:54
【问题描述】:

我正在尝试通过运行“grails dev war”命令并将战争手动部署到 Tomcat 容器中来在测试环境中部署 grails 应用程序。该应用程序没有运行,我看到几个类似这样的错误日志:

./logs/catalina.out:2014-01-13 09:18:53,415 [main] ERROR context.GrailsContextLoader - 初始化应用程序时出错: 创建名为“instanceTagLibraryApi”的 bean 时出错:注入 自动装配依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装配方法:公共无效 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:初始化 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 相关的配置丢失但不知道配置什么以及在哪里配置。

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

感谢您的帮助!

大卫。

【问题讨论】:

    标签: spring tomcat grails deployment classloader


    【解决方案1】:

    当我升级到 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'
    }
    

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

    【讨论】:

    • 感谢@Isammoc 的回答。不幸的是,配置已经是这样了。我的 BuildConfig.groovy 中有 plugins { build ":tomcat:$grailsVersion" },而我的 application.properties 中没有 plugins.tomcat 引用。
    【解决方案2】:

    我解决了这个问题,但我认为是 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的使用并为我正在使用的配置属性使用标签属性(这也更有意义)消除了在标签库的代码中使用类加载器的需要并解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2018-08-30
      • 2011-04-12
      • 2013-09-14
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多