无法在 Apache Tomcat 6 上部署战争

Posted

技术标签:

【中文标题】无法在 Apache Tomcat 6 上部署战争【英文标题】:Can't deploy war on Apache Tomcat 6 【发布时间】:2011-12-01 17:42:04 【问题描述】:

我正在使用 64 位 Debian Squeeze 并在 eclipse 上工作,我尝试通过将其粘贴到 Tomcat 的 webapps 文件夹中来部署一个 war 文件,但它没有部署 war 文件,我检查并发现 Tomcat 正在运行。我重新安装了 Tomcat,但没有任何改变。

发生了什么事?这是我第一次在 Tomcat 上部署 war 文件时遇到这种问题。

我们将不胜感激。

编辑:我忘记添加从 Catalina.out 文件中获得的信息:

java.util.zip.ZipException: error in opening zip file
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:114)
        at java.util.jar.JarFile.<init>(JarFile.java:135)
        at java.util.jar.JarFile.<init>(JarFile.java:72)
        at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:72)
        at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:48)
        at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:70)
        at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:104)
        at sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:71)
        at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:148)
        at org.apache.catalina.startup.ContextConfig.fixDocBase(ContextConfig.java:886)
        at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:1021)
        at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:279)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
        at org.apache.catalina.core.StandardContext.init(StandardContext.java:5707)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4449)
        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.deployWAR(HostConfig.java:943)
        at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:778)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:504)
        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)
5/10/2011 01:19:42 PM org.apache.catalina.core.StandardContext resourcesStart
SEVERE: Error starting static Resources
java.lang.IllegalArgumentException: Invalid or unreadable WAR file: error in opening zip file
        at org.apache.naming.resources.WARDirContext.setDocBase(WARDirContext.java:135)
        at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4320)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4489)
        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.deployWAR(HostConfig.java:943)
        at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:778)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:504)
        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)

【问题讨论】:

【参考方案1】:

这可能是一个大的战争文件和/或您的 Tomcat 不在同一个物理驱动器上。 Tomcat 在复制完成之前检测到您尝试部署某些内容。

停止你的tomcat,把你的war放到webapps中,重启它,它应该可以工作了。

或者

先复制到tomcat根文件夹,再移动到webapps。

【讨论】:

【参考方案2】:

快速清单:

使用unzip -t app.war 测试您的 zip 的完整性, 检查tomcat进程的用户是否有权限读取war文件。

【讨论】:

以上是关于无法在 Apache Tomcat 6 上部署战争的主要内容,如果未能解决你的问题,请参考以下文章

无法在一台特定服务器上部署战争

LifecycleException:无法在 Tomcat 中启动组件部署战争

无法使用部署到容器插件从 jenkins 部署对 Tomcat 的战争

使用EJB的JBoss工作项目无法部署在Tomcat Plume上

部署新战争后应用程序的工作灯控制台无法正常工作

由于已经存在根应用程序上下文,无法初始化上下文,因此在 tomcat 中部署战争失败