tomcat - 部署 Grails 应用程序时出错 : java. lang.NoClassDefFoundError: org/codehaus/groovy/runtime/BytecodeInterface8

标签 tomcat grails groovy

因此,我有一个在本地计算机上的 STS 中运行的 Grails 应用程序,我正在尝试将其部署到 CentOS/Tomcat 服务器 VM。我想我正确地安装了 Groovy 和 Grails,或者至少我现在可以通过将它们添加到/etc/bashrc 中的路径来从控制台运行它们。但是,当我将编译后的 .war 文件放入 Tomcat 服务器的 webapp 目录并重新启动服务器时,它会抛出此错误:

Oct 17, 2011 4:33:21 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive CSTools-0.1.war
2011-10-17 16:33:29,558 [main] ERROR context.ContextLoader  - Context initialization failed
org.springframework.beans.factory.access.BootstrapException: Error executing bootstraps; nested exception is org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.NoClassDefFoundError: org/codehaus/groovy/runtime/BytecodeInterface8
    at org.codehaus.groovy.grails.web.context.GrailsContextLoader.createWebApplicationContext(GrailsContextLoader.java:87)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:943)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:778)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:504)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.NoClassDefFoundError: org/codehaus/groovy/runtime/BytecodeInterface8
    at grails.spring.BeanBuilder.invokeBeanDefiningClosure(BeanBuilder.java:723)
    at grails.spring.BeanBuilder.beans(BeanBuilder.java:573)
    at grails.spring.BeanBuilder.invokeMethod(BeanBuilder.java:519)
Caused by: java.lang.NoClassDefFoundError: org/codehaus/groovy/runtime/BytecodeInterface8
    at IbatisGrailsPlugin$_closure1_closure3.doCall(IbatisGrailsPlugin.groovy:48)
    at grails.spring.BeanBuilder.invokeBeanDefiningMethod(BeanBuilder.java:679)
    at grails.spring.BeanBuilder.invokeMethod(BeanBuilder.java:550)
    at IbatisGrailsPlugin$_closure1.doCall(IbatisGrailsPlugin.groovy:46)
    at IbatisGrailsPlugin$_closure1.doCall(IbatisGrailsPlugin.groovy)
    ... 3 more
Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.runtime.BytecodeInterface8
    ... 8 more

这里有什么建议吗?我似乎无法在网上找到任何可能有助于解决此错误的信息。据我所知,JVM 是一样的(除了 OS X/Linux 版本),Grails 和 Groovy 的版本也是一样。

最佳答案

不需要在网络服务器上安装 Groovy 或 Grails,您只需要部署 war。 war 包含 groovy-all jar 和所有 Grails jar。

这里的问题是来自 STS 的编译类以某种方式进入了您的 war 。看起来 STS 使用的是 Groovy 1.8,但您使用的是 1.3.x,它使用的是没有 BytecodeInterface8 类的 Groovy 1.7。

STS 类是否编译为 WEB-INF/classes?这可能是问题所在。我总是将它更改为 target/eclipseclasses,这样它们就不会在 web-app 下,并且在你构建 war 时被忽略。要更改它,请转至项目|属性、Java 构建路径部分、源选项卡并更改“默认输出文件夹”。

另一种选择是在未用于开发的干净机器上构建 war 。

关于tomcat - 部署 Grails 应用程序时出错 : java. lang.NoClassDefFoundError: org/codehaus/groovy/runtime/BytecodeInterface8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7800930/

相关文章:

Grails jar依赖重复的log4j绑定(bind)

mysql - 如何在 Grails 中使用 Hibernate Spatial?

java - 如何在 Grails 框架中获取 GSP 中的不同列表

maven - jenkinsfile - 如何访问我的 pom.xml 中的自定义属性?

java - 从 Tomcat 上的相对路径读取文件

java - WebSphere 问题

tomcat - Puppet - 语法错误 'unpack_tomcat' ;预计 '}'

spring - 没有这样的属性 : springSecurityService for class: DUMMY

elasticsearch - Kibana脚本字段中的Groovy脚本

tomcat - tomcat是如何访问Servlet的?