java.lang.IllegalArgumentException:无效或不可读的WAR文件:打开zip文件时出错

ins*_*iac 15 java jsp tomcat catalina.out


当我的display.war文件在Tomcat上执行时,我在Catalina.2011-03-30.log中收到此错误.错误如下所示:

Mar 30, 2011 8:01:31 PM org.apache.catalina.startup.ContextConfig init  
SEVERE: Exception fixing docBase for context [/Display]   
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:119)
    at org.apache.catalina.core.StandardContext.init(StandardContext.java:5602)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4378)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500)
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1345)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:303)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
    at java.lang.Thread.run(Thread.java:662)  

Mar 30, 2011 8:01:31 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:4249)  
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4418)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500)
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1345)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:303)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
    at java.lang.Thread.run(Thread.java:662)  
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Bal*_*usC 17

不幸的是,Buhake Sindi建议的原因和解决方案并不那么明显.我曾经在几个论坛上看过几次这个问题.我自己至少经历过一次.Google目前针对确切的异常消息提供了超过500次点击.一切都没有答案.但是有一些提示它可以在IDE X中运行,但不适用于IDE Y,它可以在Server X上运行,但不适用于服务器Y.或者从WAR 中删除或添加一些内容(可以在此处找到一个典型示例)).然而,没有人深入解释真正的根本原因.

认为它与使用的JDK/JRE版本和WAR的文件大小有关.以下是您可以尝试的一些事项:

  • 尝试在IDE和/或appserver环境中更新/对齐JDK/JRE版本.
  • 尝试向WAR添加一些东西,一些随机的JAR或JSP文件或其他任何东西,然后重建.

  • 添加一个空白的jsp文件,构建和部署WAR文件再次为我工作!但我仍然无法理解为什么会发生这种异常,或者为什么通过在项目中添加一些内容并再次构建它来解决它! (2认同)

小智 8

我随机遇到了这个错误.我认为原因很简单.

当您创建WAR文件并通过"慢"进程将其传输到tomcat目录时,可能会发生这种情况.在我的情况下,它是由远程机器通过scp转移.在传输结束之前,tomcat会注意到文件已更改(修改日期等).然后它可能会尝试部署不完整的文件.它会遇到一个zip错误.

如果从另一个目录复制文件,理论上也会发生同样的情况; 虽然机会较小,但副本速度更快.

为了完全避免错误,应该从同一磁盘上的另一个位置移动(不复制)该文件.这样的举动(我认为)是原子的.

在我开发过程中,每隔一段时间就会出现错误并不是一个大问题; 当我遇到它时,我只是重新开始转移.


Mik*_*one 5

如果要在Linux上进行部署,请确保用户可以读取tomcat进程正在运行的情况.将"chmod + r"运行到war文件,为每个人添加读取权限.