15


当我的 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)  

提前致谢。

4

15 回答 15

17

不幸的是,原因和解决方案并不像 Buhake Sindi 所说的那么明显。我之前在几个论坛中多次看到过这个问题。我什至至少亲身经历过一次。谷歌目前对确切的异常消息进行了超过 500 次点击。一切仍未得到答复。然而,有迹象表明它适用于 IDE X,但不适用于 IDE Y,它适用于服务器 X,但不适用于服务器 Y。或者从 WAR 中删除或添加某些内容是有效的(可以在此处找到一个典型示例)。然而,没有人深入解释真正的根本原因。

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

  • 尝试在您的 IDE 和/或应用服务器环境中更新/对齐 JDK/JRE 版本。
  • 尝试在 WAR 中添加一些东西,一些随机的 JAR 或 JSP 文件或其他任何东西,然后重新构建。
于 2011-03-31T00:33:08.500 回答
10

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

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

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

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

不过,在我开发过程中,偶尔出现错误并不是什么大问题;当我遇到它时,我只是重新开始传输。

于 2014-01-23T12:53:01.760 回答
5

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

于 2012-02-27T17:01:21.177 回答
3

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

编辑:我想通了为什么。“无效或不可读的 WAR 文件:打开 zip 文件时出错”绝对是一个令人困惑的错误消息。真正的原因只是“Tomcat无法部署战争,因为有一些初始化错误”。就我而言,我的 War 文件缺少一些配置文件,这些文件会抛出未找到文件的异常。不同的 Tomcat 版本似乎会报告不同的错误。在 6.0.26 上,它正确地报告了错误。但是在 6.0.32 上,它报告了令人困惑的“无效或不可读的 WAR 文件”。

于 2011-07-27T19:42:15.700 回答
3

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

解决您的战争文件到中间目录之类/home/yourusername的东西,然后移动到您的webapps目录。对我来说,这个问题可能是因为文件还没有完全上传,tomcat 试图提取/部署它。

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

于 2015-05-05T08:03:33.557 回答
1

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

于 2015-05-12T12:18:09.367 回答
0

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

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

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

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

于 2012-03-08T04:30:24.793 回答
0

就我而言,是文件传输过程中的文件损坏导致了此问题。因此,当我们将文件传输到远程服务器时,验证文件的校验和始终是最佳实践。

于 2012-03-22T16:48:28.647 回答
0

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

于 2012-05-23T13:28:27.090 回答
0

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

于 2012-05-23T16:36:53.177 回答
0

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

于 2016-01-20T22:53:44.250 回答
0

就我而言,我使用 WinSCP 传输文件。我尝试了很多次这里描述的所有建议。我所做的只是重新启动 WinSCP 并且 tomcat 可以读取该文件。

于 2017-02-03T14:34:33.950 回答
0

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

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

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

于 2017-04-28T19:48:07.487 回答
0

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

于 2020-04-06T12:48:04.967 回答
-2

原因很清楚:

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

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

将您的 WAR 文件从 重命名a.wara.zip. 如果您无法使用 Winzip/7-Zip/WinRar 打开 zip 文件,请再次重建您的 WAR 文件。

希望这可以帮助。

于 2011-03-31T00:15:06.503 回答