如何在Tomcat7中部署Grails 3.0.1 war文件?

时间:2015-06-05 20:00:48

标签: tomcat grails

如何在Tomcat7的非嵌入式版本中部署Grails 3.0.1 war文件?我得到的只是一个空白页面或404错误。我可以成功部署我的其他war文件,所以我知道它不是Tomcat的问题。我的版本和我采取的步骤如下:

Server version: Apache Tomcat/7.0.52 (Ubuntu)
Grails Version: 3.0.1
Groovy Version: 2.4.3
JVM Version: 1.7.0_80

我怀疑这个问题与Spring框架或Gradle有关。我对它们中的任何一个都不是很熟悉,但我注意到3.0.1不再使用web.xml而且不再有Config.groovy文件。以下网站详细介绍了如何在3.0.x中部署Grails项目。

http://grails.github.io/grails-doc/3.0.x/guide/deployment.html

  1. 我跑了grails run-app并且毫无问题地将其部署到localhost:8080
  2. 我不想使用嵌入式版本的Tomcat。我想将它部署到不同版本的Tomcat,这就是我遇到问题的地方。

    1. 我将Tomcat依赖项的范围更改为:
      • provided "org.springframework.boot:spring-boot-starter-tomcat"
    2. 我使用grails war生成了war文件
      • website.war添加到/var/lib/tomcat7/webapps
      • 运行sudo service tomcat7 restart以重新启动tomcat
      • 检查website.war是否自动解包(确实如此)
      • 已检查localhost:9999/website
    3. ^这给了我一个空白的白页。

      1. 我删除了website.war及其关联的解压缩文件夹。
        • 已检查localhost:9999
        • 它成功将我带到了默认的Tomcat屏幕
        • 已登录管理员应用
        • 在经理应用上部署website.war
        • 它给了我ok状态
        • 已检查localhost:9999/website
      2. ^这给了我以下错误:

          

        HTTP状态404 - / website,请求的资源不可用。

        其他相关信息:

        https://grails.github.io/grails-doc/3.0.x/guide/single.html

          

        " Grails 3.0不再需要web.xml。可以通过Spring"

        完成自定义

        BuildConfig.groovy文件也已更改。

          

        旧位置:grails-app/conf/BuildConfig.groovy   新位置:build.gradle   描述:现在,在Gradle构建文件中定义构建时配置

        我发现的其他帖子 (抱歉没有提供链接,如果没有至少10个声望点,我不能发布超过两个链接。)

        grails.org/wiki/Deployment#Tomcat

        • 这表明在webapps文件夹中发起了一场战争。我已经尝试过了,但它没有用。

        stackoverflow.com/questions/27557893/grails-app-deploy-in-tomcat-server-using-war-file-fails

        • 他问了一个非常相似的问题,但他正在使用不同版本的Grails
        • 标记的解决方案引用Config.groovy
        • Grails 3.0.1中的构建时配置现在位于Build.gradle
        • 我不知道他是否成功地解决了这个问题。

        stackoverflow.com/questions/23664421/cant-deploy-grails-war-file-in-tomcat-results-in-404

        • 解决方案需要更改为Config.groovyGrails 3.0.1项目
        • 中不再提供此问题

        修改

        当解压缩website.war文件夹时,catalina.out日志文件显示:

        :: Spring Boot ::        (v1.2.3.RELEASE)
        Jun 07, 2015 3:01:23 PM org.apache.catalina.core.ContainerBase addChildInternal
        SEVERE: ContainerBase.addChild: start: 
        org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/website]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1073)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
        Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
        at org.apache.tomcat.websocket.server.WsServerContainer.<init>(WsServerContainer.java:147)
        at org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131)
        at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:47)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5456)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 10 more
        
        Jun 07, 2015 3:01:23 PM org.apache.catalina.startup.HostConfig deployWAR
        SEVERE: Error deploying web application archive /var/lib/tomcat7/webapps/website.war
        java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/website]]
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1073)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
        
        Jun 07, 2015 3:01:23 PM org.apache.coyote.AbstractProtocol start
        INFO: Starting ProtocolHandler ["http-bio-9999"]
        Jun 07, 2015 3:01:23 PM org.apache.catalina.startup.Catalina start
        INFO: Server startup in 26775 ms
        

        然后,当我尝试加载localhost:9999/website时,catalina.out文件会显示:

        Jun 07, 2015 3:05:04 PM org.apache.coyote.AbstractProtocol pause
        INFO: Pausing ProtocolHandler ["http-bio-9999"]
        Jun 07, 2015 3:05:04 PM org.apache.catalina.core.StandardService stopInternal
        INFO: Stopping service Catalina
        Jun 07, 2015 3:05:04 PM org.apache.coyote.AbstractProtocol stop
        INFO: Stopping ProtocolHandler ["http-bio-9999"]
        Jun 07, 2015 3:05:04 PM org.apache.coyote.AbstractProtocol destroy
        INFO: Destroying ProtocolHandler ["http-bio-9999"]
        Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
        WARNING: Problem with directory [/usr/share/tomcat7/common/classes], exists: [false], isDirectory: [false], canRead: [false]
        Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
        WARNING: Problem with directory [/usr/share/tomcat7/common], exists: [false], isDirectory: [false], canRead: [false]
        Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
        WARNING: Problem with directory [/usr/share/tomcat7/server/classes], exists: [false], isDirectory: [false], canRead: [false]
        Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
        WARNING: Problem with directory [/usr/share/tomcat7/server], exists: [false], isDirectory: [false], canRead: [false]
        Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
        WARNING: Problem with directory [/usr/share/tomcat7/shared/classes], exists: [false], isDirectory: [false], canRead: [false]
        Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
        WARNING: Problem with directory [/usr/share/tomcat7/shared], exists: [false], isDirectory: [false], canRead: [false]
        Jun 07, 2015 3:05:06 PM org.apache.coyote.AbstractProtocol init
        INFO: Initializing ProtocolHandler ["http-bio-9999"]
        Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.Catalina load
        INFO: Initialization processed in 576 ms
        Jun 07, 2015 3:05:06 PM org.apache.catalina.core.StandardService startInternal
        INFO: Starting service Catalina
        Jun 07, 2015 3:05:06 PM org.apache.catalina.core.StandardEngine startInternal
        INFO: Starting Servlet Engine: Apache Tomcat/7.0.52 (Ubuntu)
        Jun 07, 2015 3:05:06 PM org.apache.catalina.startup.HostConfig deployDescriptor
        INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/host-manager.xml
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.HostConfig deployDescriptor
        INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/docs.xml
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.HostConfig deployDescriptor
        INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/manager.xml
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.HostConfig deployDescriptor
        INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/examples.xml
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://java.sun.com/jstl/core_rt is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://java.sun.com/jstl/core is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/core is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt_rt is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/fmt is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/functions is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/permittedTaglibs is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/scriptfree is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://java.sun.com/jstl/sql_rt is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://java.sun.com/jstl/sql is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/sql is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://java.sun.com/jstl/xml_rt is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://java.sun.com/jstl/xml is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.TaglibUriRule body
        INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/xml is already defined
        Jun 07, 2015 3:05:07 PM org.apache.catalina.startup.HostConfig deployWAR
        INFO: Deploying web application archive /var/lib/tomcat7/webapps/website.war
        Jun 07, 2015 3:05:07 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
        INFO: validateJarFile(/var/lib/tomcat7/webapps/website/WEB-INF/lib/tomcat-embed-core-8.0.20.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servlet/Servlet.class
        Jun 07, 2015 3:05:07 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
        INFO: validateJarFile(/var/lib/tomcat7/webapps/website/WEB-INF/lib/tomcat-embed-el-8.0.20.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/el/Expression.class
        Jun 07, 2015 3:05:07 PM org.apache.catalina.deploy.WebXml setVersion
        WARNING: Unknown version string [3.1]. Default version will be used.
        

2 个答案:

答案 0 :(得分:7)

为了提供更全面的答案,使用David Gonzalez Maline提供的链接,Graeme引用了GitHub中的文档提交。

  

请注意,默认情况下Grails将在WAR文件中包含一个可嵌入版本的Tomcat,以便它可以运行(参见前面的内容)   部分),如果部署到不同的版本,这可能会导致问题   汤姆猫如果您不打算使用嵌入式容器,那么您   应该先将Tomcat依赖项的范围更改为@provided @   在build.gradle中部署到您的生产容器:

     

provided "org.springframework.boot:spring-boot-starter-tomcat"

Source(强调我的)

简而言之,如果将其保留在默认的compile范围内,它将包括两个不同版本的Tomcat,Tomcat 7(您正在部署它们)和Tomcat 8(由{{提供) 1}})。

答案 1 :(得分:4)

答案在这里:

https://jira.grails.org/browse/GRAILS-12105

你需要声明对&#34; org.springframework.boot的依赖:spring-boot-starter-tomcat&#34;

在build.gradle中提供<​​/ p>