我有一个Grails应用程序已经在CloudFoundry上运行了好几个月。我将应用程序从Grails 2.0.4更新到2.1.0,并更新了我一直在使用的一些插件。
现在,当我将应用程序推送到CloudFoundry并开始时,我收到错误:
'appname'状态未确定,信息不足。
tomcat Catalina日志显示下面的NoClassDefFoundError。
我已经阅读了Ivy cache的问题,但还没有考虑过。我已将vmc更新到最新版本(0.3.18)。
SEVERE: Error deploying web application directory ROOT
java.lang.NoClassDefFoundError: org/apache/tomcat/PeriodicEventListener
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1128)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4421)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4734)
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.deployDirectory(HostConfig.java:1079)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
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: java.lang.ClassNotFoundException: org.apache.tomcat.PeriodicEventListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
... 34 more
答案 0 :(得分:3)
从Grails 1.3.7迁移到2.1.1时,我遇到了这个问题。
我通过解压缩WAR文件,删除所有tomcat - * .jar文件(有几个tomcat嵌入式jar)然后重启Tomcat来修复它。
我已经运行了Tomcat 6,我想知道这是不是问题?无论如何,我的应用程序现在正在工作 - 虽然这不是最好的安装程序!
答案 1 :(得分:2)
我从2.1.0回滚到Grails 2.0.4解决了这个问题。我认为问题可能是described here。但是Graeme提供的解决方法在部署到cloudfoundry.com时没有解决问题。
在Grails 2.1.0下本地运行此应用程序没有问题,但在cloudfoundry.com下无效。
答案 2 :(得分:2)
我没有使用CloudFoundry,但遇到了将Grails 2.1 WAR部署到Tomcat 6的相同问题。目前,我已配置_Events.groovy
以删除嵌入式tomcat-
和grails-plugin-tomcat-
WAR生成之前来自WAR临时区域的jar:
eventCreateWarStart = { warName, stagingDir ->
// Work-around to remove tomcat jars from .war.
File libDir = new File("${stagingDir}/WEB-INF/lib/")
if (libDir.exists() && libDir.isDirectory()) {
ant.echo(message: 'Events.eventCreateWarStart: Removing embedded tomcat .jars from .war.')
libDir.eachFileMatch(FileType.FILES, ~/^(tomcat|grails-plugin-tomcat).*\.jar$/) { File jarToRemove ->
jarToRemove.delete()
}
}
}
(可能没有必要进行libDir.exists() && libDir.isDirectory()
检查。)
现在这种方法很有用,但获得真正的解决方案而不是解决方法会很好。
答案 3 :(得分:1)
我对spring应用程序有同样的问题。重新启动服务~sunrowfoundry / vcap / dev_setup / bin / vcap stop,cloudfoundry / vcap / dev_setup / bin / vcap start我设法推送我的应用程序没有任何问题。安装在更强大的机器上的CF可能会有所帮助。你目前的硬件是什么?
答案 4 :(得分:1)
我知道这个问题是关于Grails和CF的,但谷歌并不太关心这个......;)
java.lang.ClassNotFoundException: org.apache.tomcat.PeriodicEventListener
当Eclipse WTP尝试发布Maven项目并运行它时,也可能会出现。在依赖关系层次结构的某处,您应该找到一个tomcat库,即使其范围是provided
或test
。
检查WTP-webapp的lib目录,注意那里的一堆tomcat-library。