Tomcat Could not publish to the server. IndexOutOfBoundsException | java.util.zip.ZipException

在Eclipse里的Tomcat发布项目报错了:Could not publish to the server. java.lang.IndexOutOfBoundsException
然后在实际的tomcat中启动也报错:


 java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to initialize component [[email protected]]
	at ...
Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [[email protected]]
	at ...
Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
	at ...

刚开始懒得看日志,直接弄了个新tomcat来跑,简单粗暴,结果还是报错;然后才去看的日志。
然后在日志中的这一行:java.util.zip.ZipException
证明是压缩包出错了,很大可能是lib下的jar出错了,而我用的又是maven来管理包,那么就证明是maven本地仓库出错了。

那么,lib报下这么多jar如何判定是哪个jar出错了呢?

可以通过zip解压工具来判断,假设项目war包为,abc.war——
首先将abc.war通过解压工具解压,然后进入WEB-INF/lib目录,将所有jar都解压一次,此时会看到解压工具报错:
Tomcat Could not publish to the server. IndexOutOfBoundsException | java.util.zip.ZipException
从上图可以看出是 httpclient-4.5.3.jar错了

那么现在来到maven本地仓库的目录
在搜索栏搜索“httpclient-4.5.3.jar”:
Tomcat Could not publish to the server. IndexOutOfBoundsException | java.util.zip.ZipException
右键 httpclient-4.5.3.jar
选择“打开文件位置”,此时进入了httpclient-4.5.3.jar所在目录:
Tomcat Could not publish to the server. IndexOutOfBoundsException | java.util.zip.ZipException
将整个httpclient/4.5.3目录下的文件全部删除即可。

如果遇到“文件被使用”提示,可能文件本身就被eclipse占用,可尝试退出eclipse再试。

此时,回到eclipse进行 Maven Update即可。

 

 

向来喜欢简单粗暴的解决方式╮(╯▽╰)╭,