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

时间:2011-03-31 00:10:20

标签: 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)  

提前致谢。

15 个答案:

答案 0 :(得分:16)

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

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

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

答案 1 :(得分:8)

我随机遇到了错误。我认为原因很简单。

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

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

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

在我开发过程中,每隔一段时间发生一次错误并不是一个大问题;当我遇到它时,我只是重新启动转移。

答案 2 :(得分:5)

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

答案 3 :(得分:3)

这里的问题相同。 war文件可以通过7-zip打开。

修改:我弄清楚原因。 “无效或不可读的WAR文件:打开zip文件时出错”绝对是一个令人困惑的错误消息。真正的原因只是“Tomcat无法部署战争,因为存在一些初始化错误”。在我的情况下,我的War文件缺少一些配置文件,它们会抛出找不到文件的异常。不同的Tomcat版本似乎报告了不同的错误。在6.0.26,它正确报告错误。但是在6.0.32上,它报告了令人困惑的“无效或不可读的WAR文件”。

答案 4 :(得分:3)

我遇到了这个问题,我没有添加任何内容或修改任何内容。但我想我的问题是因为我直接将war文件上传到远程tomcat7/webapps/目录。

将war文件解析为/home/yourusername等中间目录,然后转移到webapps目录。可能对我来说这个问题引发了,因为文件尚未完全上传,而tomcat正试图提取/部署它。

希望这会对某人有所帮助。

答案 5 :(得分:1)

我多次面对同样的问题,最后我找到了解决方案..确切的解决方案 无论如何,我在本地使用Tomcat 8.0.9进行测试,当上传war文件到服务器时,我得到了解压缩战争的错误消息..所以我检查了服务器Tomcat,它是6所以我安装了那个版本并检查了版本Java在服务器上找到它5所以我也确保我在本地机器上使用版本5。 问题发生在战争文件包装如何,所以如果你使用相同的版本和tomcat它将以正确的方式打包,服务器可以理解... 另一种解决方案..更新服务器版本以匹配您在本地使用的版本。 他们应该是一样的。 希望这能解决你的问题。

答案 6 :(得分:0)

Aby的具体问题似乎已经解决了,但万一其他人偶然发现我遇到同样问题的页面......

确保/ opt / solr目录具有正确的权限集。在稍后转到Tomcat安装之前,我正在关注SolrJetty教程。因为我的solr用户是使用以下命令创建的:

useradd -d /opt/solr -s /sbin/false solr

/ opt / solr目录是使用权限700创建的,因此tomcat无法访问WAR文件。改为755,效果很好。

答案 7 :(得分:0)

在我的情况下,文件传输过程中文件损坏导致此问题。因此,每当我们将文件传输到远程服务器时,验证文件的校验和始终是最佳做法。

答案 8 :(得分:0)

确保您的WAR文件路径正确无误。我有一个错字,这也有同样的错误。

答案 9 :(得分:0)

BalusC是对的。当我在安装了openjdk版本的Java而不是常规JDK的Linux机器上运行我的webapp时遇到了这个错误。安装普通的JDK并将tomcat的JRE_HOME变量指向正常的JDK后,问题就消失了。

答案 10 :(得分:0)

我遇到了同样的问题(java.lang.IllegalArgumentException: Invalid or unreadable WAR file)。对我来说,原因是我的WAR文件中包含catalina-6.0.43.jar。为了摆脱这个错误,我创建了一个没有包含这个jar的新WAR文件,然后Tomcat 7能够成功启动该应用程序。不幸的是,这个解决方案只适用于Tomcat 7.当我尝试在Tomcat 8上部署完全相同的WAR时,我仍然遇到同样的错误。

答案 11 :(得分:0)

在我的情况下,我使用WinSCP来传输文件。我尝试了很多次这里描述的所有建议。我所做的就是重新启动WinSCP,而tomcat可以读取文件。

答案 12 :(得分:0)

谢谢@BalusC。有同样的问题。尝试了很多选择。认为这是因为lib我添加到没有原型范围的maven,因此它也转到war文件,更正,相同的结果。我可以打开它作为拉链和所有&#34;看起来&#34;好那里。

在本地尝试(不同的tomcat版本:7.0.67与7.0.22我有问题)效果很好。然后尝试使用7.0.22但在不同的VM(实例)上运行良好。我怀疑有一些东西与tomcat或可能与其他文件冲突(这只与其他VM有所不同,所有包括Java都相同)。

使用不同的tomcat实例解决了这个问题。

答案 13 :(得分:0)

在我的情况下,war文件没有从存储库正确下载,因为文件大小只有几KB。 更正后,我的下载语法正确启动了

答案 14 :(得分:-1)

原因清楚显示:

java.lang.IllegalArgumentException: Invalid or unreadable WAR file : error in opening zip file  

WAR(Web ARchive)文件是一个zip文件,其中包含Web应用程序的类,库和资源。

将WAR文件从a.war重命名为a.zip。如果您无法使用Winzip / 7-Zip / WinRar打开zip文件,请重新生成WAR文件。

希望这有帮助。