Tomcat启动失败:org.apache.catalina.LifecycleException问题求助
问题:Tomcat启动时因Jar文件损坏抛出异常
使用Java 8、Tomcat 9与Eclipse IDE开发Web应用,启动Tomcat时出现如下异常:
07-Jul-2023 15:46:31.437 SEVERE [main] org.apache.catalina.core.ContainerBase.startInternal A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@30ec211a] at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:192) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:923) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:835) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1383) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:265) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:430) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.startup.Catalina.start(Catalina.java:772) 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.catalina.startup.Bootstrap.start(Bootstrap.java:347) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478) Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@30ec211a] at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:139) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:173) at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:752) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4881) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5014) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1383) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916) ... 21 more Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: invalid LOC header (bad signature) at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:143) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) ... 33 more Caused by: java.util.zip.ZipException: invalid LOC header (bad signature) at java.util.zip.ZipFile.read(Native Method) at java.util.zip.ZipFile.access$1400(ZipFile.java:60) at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:717) at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:419) at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158) at sun.misc.IOUtils.readFully(IOUtils.java:65) at java.util.jar.JarFile.getBytes(JarFile.java:425) at java.util.jar.JarFile.getManifestFromReference(JarFile.java:193) at java.util.jar.JarFile.getManifest(JarFile.java:180) at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:141)
已尝试删除Tomcat配置并重新安装服务器、删除Maven依赖库目录,但问题仍未解决。
解决方案
- 定位损坏的Jar文件:异常核心
java.util.zip.ZipException: invalid LOC header (bad signature)明确表示存在损坏的Jar文件。可以通过以下方式定位:- 查看Tomcat启动日志中
JarResourceSet@xxx对应的Jar资源路径; - 使用命令行验证Jar文件完整性:执行
jar tf <Jar文件完整路径>,若命令报错则说明该Jar已损坏。
- 查看Tomcat启动日志中
- 重新获取损坏的Jar文件:
- 若为Maven依赖:找到对应依赖项,执行
mvn clean install -U强制更新依赖;或手动删除本地仓库中该依赖的文件夹,再重新执行构建命令; - 若为Tomcat自带Jar:下载官方正版Tomcat 9压缩包,替换损坏的Jar文件,或直接覆盖整个Tomcat的
lib目录。
- 若为Maven依赖:找到对应依赖项,执行
- 清理项目与服务器缓存:
- 在Eclipse中,右键项目 → Maven → Clean,再右键项目 → Run As → Maven Install,重新生成
target目录; - 删除Tomcat安装目录下
work文件夹中的项目缓存文件,避免残留损坏资源。
- 在Eclipse中,右键项目 → Maven → Clean,再右键项目 → Run As → Maven Install,重新生成
- 检查Eclipse部署配置:打开项目的
Deployment Assembly设置,确认部署的依赖Jar无重复、无损坏路径,确保部署到Tomcat的资源都是完整有效的。
内容的提问来源于stack exchange,提问作者Tuba Mutlu
相关产品推荐
相关产品推荐

