繁体   English   中英

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

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


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

提前致谢。

不幸的是,原因和解决方案并不像 Buhake Sindi 所说的那么明显。 我之前在几个论坛中多次看到过这个问题。 我什至至少自己经历过一次。 Google 目前对确切的异常消息给出了超过 500 次点击。 一切都悬而未决。 然而,有迹象表明它在IDE X,而不是在IDE Y和它工作在服务器X,但不能在服务器Y.或者说,删除或添加自/其参战的作品(一个典型的例子可以发现在这里)。 然而,没有人深入解释真正的根本原因。

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

  • 尝试在您的 IDE 和/或应用程序服务器环境中更新/调整 JDK/JRE 版本。
  • 尝试向 WAR、一些随机 JAR 或 JSP 文件或其他内容添加一些内容,然后重新构建。

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

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

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

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

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

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

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

将您的 war 文件解决到中间目录,例如/home/yourusername或其他内容,然后移动到您的webapps目录。 对我来说,这个问题可能是因为文件还没有完全上传并且 tomcat 正在尝试提取/部署它。

希望这会帮助某人。

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

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

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

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

BalusC 是对的。 当我在安装了 openjdk 版本的 Java 而不是常规 JDK​​ 的 Linux 机器上运行我的 web 应用程序时,我遇到了这个错误。 安装普通 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。 有同样的问题。 尝试了很多选择。 认为这是因为我在没有原型范围的情况下添加到 Maven 的 lib,结果它也转到了战争文件,更正了,结果相同。 我可以将它作为拉链打开,那里的所有“看起来”都不错。

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

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

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

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

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

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

/opt/solr 目录的创建权限为 700,因此 tomcat 无法访问 WAR 文件。 更改为 755 并完美运行。

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

原因很清楚:

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

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

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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM