无法在Tomcat上运行Grails应用程序

Ugl*_*ede 3 ubuntu grails tomcat

我正在尝试将Grails应用程序部署到在Ubuntu上运行的Tomcat容器.我试图做"一切正常",但仍然无法让它发挥作用.有任何想法吗?

  • 我正在运行"Ubuntu Server 12.04.3 LTS".我安装了与Ubuntu(6.0.35)捆绑在一起的Tomcat.我知道Grails可以使用大量内存,因此我将分配给JVM的内存增加到512MB.Tomcat提供的示例应用程序运行良好.

  • 在我的PC上(运行Windows 7),我安装了Grails(最新版本:2.3.7)和NetBeans(版本:7.4).

  • 我创建了一个非常简单的"Hello world"Grails应用程序.我在我的电脑上运行它有些麻烦(我刚发布的另一个问题),但它编译得很好,我可以创建一个没有问题的战争文件.通过运行"grails战争".

  • 我已经使用Tomcat"Web应用程序管理器"来上传War-file.它应该放在/ var/lib/tomcat6/webapps中,解压缩,一切看起来都很好.

  • 但是当我尝试启动应用程序(在管理器中选择"开始")时,我收到"FAIL - 上下文路径中的应用程序/ MyTestApp无法启动"消息.我试图重启Tomcat,但遇到了同样的问题.

当我查看Tomcat日志(catalina.out)时,会记录下来:

2014-03-14 20:24:32,148 [http-8080-1] ERROR context.ContextLoader  - Context
initialization failed
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'grailsApplication' defined in ServletContext
resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed;
nested exception is java.lang.NoClassDefFoundError: javax/servlet/AsyncContext
at java.lang.Thread.run(Thread.java:701) Caused by:
java.lang.NoClassDefFoundError: javax/servlet/AsyncContext
at java.lang.Class.privateGetDeclaredMethods(Class.java:2534)
at java.lang.Class.getDeclaredMethods(Class.java:1855)
...
Caused by: java.lang.ClassNotFoundException: javax.servlet.AsyncContext
Run Code Online (Sandbox Code Playgroud)

似乎无法找到"javax.servlet.AsyncContext"类.Grails文档说在Tomcat上运行Grails是小菜一碟,没有什么应该出错......"javax.servlet.AsyncContext"类似乎与"Servlet 3.0"有关,但我不知道了解Java EE.我只是觉得最新版本的一切都可以开箱即用......

我需要在服务器上安装什么吗?有什么要添加到Tomcat的吗?或者我应该在应用程序中更改一些配置?

我会非常感谢任何帮助!:-)

/来自瑞典的安德斯

dma*_*tro 5

如果使用具有此版本Grails的适当版本的Tomcat,这是一块蛋糕.:)

最新版本的Grails默认使用Servlet 3.0和嵌入式Tomcat 7.0.52.1(在run-app期间使用),我怀疑它是否与Tomcat 6.0.35兼容.但您可以根据需要将servlet版本降级到2.5或2.4:

//BuildConfig.groovy (first line)
grails.servlet.version = "3.0" //2.4 or 2.5
Run Code Online (Sandbox Code Playgroud)