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

时间:2016-10-18 12:23:11

标签: spring tomcat grails gradle tomcat7

我有一个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容器&gt;中进行的。版本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的范围设置为provided
  • build.gradle中的tomcat版本设置为ext['tomcat.version'] = '7.0.72'(根据官方文档的建议。我不能使用与服务器上的tomcat完全相同的版本(7.0.39),因为有些库在maven central上不适用于此版本。

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

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