spring – 如何在Tomcat 7上部署Grails 3应用程序?

我有一个Grails应用程序,我想部署到一个tomcat实例.正在使用的库的相关版本:

Grails Version: 3.2.0
Groovy Version: 2.4.7
JVM Version: 1.7.0_79
Tomcat Version: 7.0.39

我构建了一个WAR文件(使用grails war),将其上传到服务器,将其放在webapp目录中并重新启动tomcat. WAR文件像往常一样被解压缩,但是当试图访问webapp的索引页面时,它只返回错误404.如果我在webapp的目录中手动放置一个名为“ìndex.html”的文件,则会提供此文件.因此,我得出结论,tomcat根本没有启动应用程序.

我试图检查日志中的错误,但catalina.out几乎是空的.重新部署我的webapp会产生以下日志输出:

INFO: Reloading Context with name [/myapp] has started
Oct 18, 2016 1:56:30 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/<tomcat-path>/webapps/myapp/WEB-INF/lib/javax.el-api-2.2.4.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/el/Expression.class
Oct 18, 2016 1:57:43 PM org.apache.catalina.core.ApplicationContext log
INFO: 1 Spring WebApplicationInitializers detected on classpath
Oct 18, 2016 1:57:43 PM org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/myapp] is completed

我在那里看不到任何严重的错误.我怀疑的一件事是我的项目没有web.xml文件,但我读到这是在Grails 3和servlet容器>中进行的.版本3.0不再需要web.xml(tomcat 7支持servlet 3.0版).我试过的事情:

>在服务器上以独立模式启动应用程序(使用java -Dgrails.env = prod -jar myapp.war).这完全可以工作,我可以在端口8080上本地访问它(我无法从远程尝试它,因为只有我实际想要部署到的tomcat实例才允许通过防火墙).
>应用官方grails文档(http://docs.grails.org/latest/guide/deployment.html)中的建议:将依赖项org.springframework.boot:spring-boot-starter-tomcat的范围设置为提供
>将build.gradle中的tomcat版本设置为ext [‘tomcat.version’] =’7.0.72′(根据官方文档的建议.我不能使用与服务器上的tomcat完全相同的版本(7.0. 39)因为maven central上的某些库不适用于此版本.

所有的尝试都没有任何效果.我非常感谢任何提示,进一步的调试技巧或我可能忽略的事情.

提前致谢!

最佳答案 这是一个Grails错误,将在3.2.1中修复,将于今天发布.有关3.2.0的解决方案,请参阅以下命令:

https://github.com/grails/grails-core/issues/10196#issuecomment-251155196

点赞