如果报错中没有提示其他信息,只提示java.util.zip.ZipError:invalid LOC header (bad signature) 或者invalid CEN header (bad signature)。无从下手,那就来看下面的解决方法吧。
原因是maven仓库中的某个jar包下载不完整或损坏等原因无法正常加载。
一个大项目中有很多的jar包,不可能一一排查。下面提供两个快捷方法。
1、删除本地maven的\repository库中所有.lastupdate后缀文件 以及sha1-in-progress为后缀的文件,重新下载。
当我们使用eclipse下载jar包,有事突然退出,再次进入jar包还是下载不全,可能的原因就是 maven没有将jar下载完时,会生成一个.lastupdate文件,在校验sha1码未完成时会生成sha1-in-progress为后缀的文件.
解决方法: 使用文件搜索工具(楼主用的是 Everything)输入.lastupdate删除所有以.lastupdate结尾的文件; 输入sha1-in-progress删除所有以sha1-in-progress结尾的文件。
然后简单修改.pom(比如加空格) 保存,然后eclipse就会重新下载jar包!
2、检查项目中有问题的jar包 如果通过第一步,启动项目还是报错,可以通过mvn test命令来检查项目中有问题的jar包,如果想跳过测试,可以使用命令:
mvn test -Dmaven.test.skip=true
也可以通过右击项目名 -> Run As -> Maven test ,这时控制台会报哪个jar包出错。我直接执行Maven test发现控制台并没有提示那个jar包出错,后来我先执行Run As -> Maven clean,然后再执行Run As -> Maven test发现控制台就有提示哪个jar包出错了。如下面所示:
[WARNING] 读取C:\Users\01377806.m2\repository\org\apache\cxf\cxf-core\3.2.5\cxf-core-3.2.5.jar时出错; invalid CEN header (bad signature)
终于找到罪魁祸首了,然后在maven的本地库找到对应的jar包删掉,再重新下载即可。
这个问题折腾了我一天,终于解决了。