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

当我在Tomcat上执行display.war文件时,我在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.(ZipFile.java:114) at java.util.jar.JarFile.(JarFile.java:135) at java.util.jar.JarFile.(JarFile.java:72) at sun.net.www.protocol.jar.URLJarFile.(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) 

提前致谢。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Aby的具体问题似乎得到了解决,但万一其他人偶然发现我遇到同样的问题…

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

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

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

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

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

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

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

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

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

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

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

原因清楚地显示:

 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文件。

希望这可以帮助。