Ошибка при развертывании приложения Grails: java.lang.NoClassDefFoundError: org / codehaus / groovy / runtime / BytecodeInterface8 - PullRequest
2 голосов
/ 18 октября 2011

Итак, у меня на локальном компьютере запущено приложение Grails в STS, и я пытаюсь развернуть его на виртуальной машине CentOS / Tomcat.Я думаю, что я правильно установил Groovy и Grails, или, по крайней мере, теперь я могу запустить их из консоли, добавив их в путь в / etc / bashrc.Однако, когда я беру свой скомпилированный файл .war и помещаю его в каталог веб-приложения сервера Tomcat и перезагружаю сервер, он выдает эту ошибку:

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.

1 Ответ

7 голосов
/ 18 октября 2011

Вы не нуждаетесь в Groovy или Grails, установленных на веб-сервере, вам просто нужно развернуть войну. Война содержит кувшин "все в клеве" и все банки "Грааля".

Проблема здесь в том, что скомпилированные классы из STS превращают это в вашу войну. Похоже, что STS использует Groovy 1.8, но вы используете 1.3.x, который использует Groovy 1.7, который не имеет класса BytecodeInterface8.

Скомпилированы ли классы STS с WEB-INF / классами? Это, наверное, проблема. Я всегда изменяю его на target / eclipseclasses, чтобы они не были включены в веб-приложение и игнорировались при создании войны. Чтобы изменить его, перейдите в Project | Properties, раздел «Путь сборки Java», вкладку «Source» и измените «Папку вывода по умолчанию».

Другой вариант - построить войну на чистой машине, которая не используется для разработки.

...