【问题标题】:Tomcat Caused by: java.util.zip.ZipException: error in opening zip fileTomcat 原因:java.util.zip.ZipException:打开 zip 文件时出错
【发布时间】:2020-10-10 04:12:39
【问题描述】:

我有一个 spring mvc 项目,但是当我通过 Tomcat 运行它时它会抛出 Caused by: java.util.zip.ZipException: error in opening zip file。如何找出未正确加载的 jar 文件。 我已将 -verbose:class 添加到 VM 选项中,但它只打印出 Loaded jar,而不是错误。
Tomcat 版本:apache-tomcat-8.5.23
JDK版本:jdk1.8.0_152
春季版:4.3.3.RELEASE

错误信息如下:

org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/hello-world]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
    at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1739)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:482)
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:431)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
    at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1408)
    at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@c078b65]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4860)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4995)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 44 more
Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@186802b8]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:113)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
    at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:724)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 47 more
Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: error in opening zip file
    at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:113)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    ... 50 more
Caused by: 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:225)
    at java.util.zip.ZipFile.<init>(ZipFile.java:155)
    at java.util.jar.JarFile.<init>(JarFile.java:166)
    at java.util.jar.JarFile.<init>(JarFile.java:103)
    at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:110)
    ... 51 more

【问题讨论】:

  • 你能从 catalina.out 发布日志吗?您可能可以通过查看日志文件找到更多详细信息。另外,请参阅此链接link。它包含有关微调日志记录的更多详细信息,以了解导致此问题的更多信息。
  • catalina.out 与此输出日志类似。我已经使用 Luis 的命令解决了这个问题。
  • 此外,由于 web-inf/lib 中的 0 kb jars 也可能发生此错误

标签: java tomcat


【解决方案1】:

假设您可以访问 Bash 终端,您可以尝试使用这种单线方法来测试您的 jar,假设它们都在同一个目录中

for j in $(find /path/to/lib -name '*.jar'); do jar -tvf $j > /dev/null 2>&1; [ "$?" -ne 0 ] && echo "$j jar is broken"; done

结果:

/path/to/lib/test.jar jar is broken
/path/to/lib/some.jar jar is broken

【讨论】:

  • 这个命令会找出很多破罐子,我已经从pom中一一排除了。谢谢!
  • 此外,由于 web-inf/lib 中的 0 kb jars 也可能发生此错误
  • 你能告诉我这里的'j'是什么,我不能直接在windows cmd提示符下执行吗?
  • j 是迭代变量。你需要一个 bash 终端来执行它,在 windows 上是可能的。
【解决方案2】:

这是一个较旧的线程,但我刚刚遇到了这个问题。事实证明,如果你在 Mac OS 上使用 tar(而不是创建一个 war 文件)打包你的应用程序,然后在 Linux 服务器上解压它,你最终会得到一个用于每个“libraryX.jar”的“._libraryX.jar”。罐”。不幸的是,因为 Tomcat 尝试加载 lib 目录中的每个 jar,它会选择这些根本不是 jar 的附加文件。它们包含 Mac OS 需要的扩展文件属性数据。

必须像这样创建 tar 文件以将这些文件保留在存档之外。

COPYFILE_DISABLE=1 tar -cvzf mytomcatapp.tgz mytomcatapp

【讨论】:

    【解决方案3】:

    当您的 war 文件损坏时会发生此异常。不仅 jar 文件,war 文件中的其他文件也可能被损坏。就我而言,我发现了一个损坏的 png 文件,删除它后,war 文件成功部署。 为了找到损坏的文件,请使用以下命令:

    jar xvf yourApp.war
    

    通过运行该命令,将打印每个提取文件的名称,当它到达损坏的文件时,它会打印异常。所以你可以很容易地找到它。

    【讨论】:

      猜你喜欢
      • 2014-09-08
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      相关资源
      最近更新 更多