发布项目到tomcat报错IndexOutOfboundsException

阅读更多
最近部署一个从github上拉取的maven项目,遇到各种问题,最终解决成功运行,在此记录一下解决过程。

一,maven下载jar包失败
该项目依赖了大量jar包,很多包下载失败了,本地仓库里面都是一些 lastUpdated 的文件,只有把这些文件清理掉之后才能再次让maven下载,如果一个一个目录去删就太费时间了,因此在网上淘了个bat脚本直接删除lastUpdated 文件,脚本如下:

rem -- 这里写你的仓库路径 
set REPOSITORY_PATH=F:\maven_repository
rem -- 正在搜索... 
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do ( 
    del /s /q %%i 

rem 搜索完毕 
pause

二,eclpse的Markers视图使用
虽然jar包已经下载完成,但是很有可能有些jar包有问题,比如某个jar包本身只有200kb,但是maven下载下来这个jar包可能有250kb,明显这个jar包下载的有问题,其实这个jar文件是损坏了的,根本读取不了,所以项目上面有个红叉或者感叹号但是代码里面没有任何报错,这时打开eclipse的window--show view--other..--搜索Markers打开这个视图,看里面红色的部分,都是提示某个jar包损坏(后面有个感叹号),将本地仓库中这些jar包全部删掉重新触发maven下载

三,明明maven依赖里有xx.jar的com.xx.A.class这个文件,但是代码里面import com.xx.A这行偏偏报错,这也是xx.jar文件损坏的原因,删掉重新下载

四,好不容易项目都不报错了,但是发布到tomcat中报错提示IndexOutOfboundsException,网上查说也是本地仓库jar包的问题,但不知道到底是哪些jar包有问题(Markers视图没报错了),都说删掉整个本地仓库,但是我的本地仓库太大了,删掉后不知道要下载多久,于是我直接打war包(eclipse上对项目右键--run as--maven build...--输入clean package 勾选skip tests 进行打包)后放到tomcat中启动,报错[....xxx.jar] from WEB-INF/lib java.util.zip.ZipException,显然是xxx.jar包是损坏的,于是删掉本地仓库的xxx.jar重新下载然后重新启动tomcat,又提示另一个yyy.jar有问题,就这样处理差不多10个jar包,感觉不知道还有多少要处理,偶然发现maven打包过程中的日志里面有一些ERROR信息,大概是
读取xxx.jar时出错; invalid LOC header (bad signature)这样的信息,说明这个jar包是损坏的,这样可以一次性看到所有损坏的jar,将这些jar删除掉再下载,打包没有上述WARN日志说明真的是没有问题了

有时候用maven package 也未提示也并没有错误信息,能正常打包,但是发布到tomcat中还是报错invalid LOC header (bad signature),这时要再次执行maven clean 后在执行maven package 就能让maven报错了

最近还发现一个规律,下载失败的jar的文件夹内,似乎一定有一个名称以 aether- 开头的一个文件,例如:
e15a80f4-d647-48c1-a851-91643020492f-junit-4.9.jar.sha1-in-progress
所以也可以直接在本地仓库搜索 aether ,将含有此类文件的jar目录全部删除,再次让maven重新下载

五,maven实在下载不了的,直接在http://mvnrepository.com/ 中搜索出该jar下载后放到本地仓库对应目录中



你可能感兴趣的:(maven,jar包损坏)