tomcat 高版本 加载MANIFEST.MF 中 class-path 问题(读取jar路径错误问题)

环境搭建为:maven+tomcat

tomcat 8.5.2 以上会出现改问题(包含8.5.2)

开始:
 警告: Failed to scan [file:/D:/develop/repo/xalan/xalan/2.7.2/xercesImpl.jar] from classloader hierarchy
java.io.FileNotFoundException: D:\XXX目录\xalan\xalan\2.7.2\xercesImpl.jar (系统找不到指定的文件。)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:219)
at java.util.zip.ZipFile.<init>(ZipFile.java:149)

at java.util.jar.JarFile.<init>(JarFile.java:166)

本人使用过的是maven,我以查看maven依赖,不对啊,怎么会查找这个目录下面的xercesImpl.jar,分明不对,原始路径应该是, D:\XXX目录\xerces\xercesImpl\2.9.1\xercesImpl.2.9.1.jar。

找原因,为什么为加载到D:\XXX目录\xalan\xalan\2.7.2\xercesImpl.jar这个文件,各种百度谷歌,最后找到问题是tomcat 加载包的问题。tomcat在8.5.2 中 修改了加载jar的方式,8.5.2 版本会解析jar中MANIFEST.MF文件,当该文件包含class-path属性时,会把该属性对象值,解析成需要加载的jar给加载进来。这个就是根本原因。没得办法,只有自降版本到8.5.0就能解决这个问题。为了解决这个问题,花了老子半天时间。

例如xalan.jar中MANIFEST.MF文件,部分截图如下:

这个就会加载配置的这3个jar,而且寻找路径是xalan.jar所在的文件下寻找。

8.5.0不会出现这种问题,往上的版本就会存在该问题。


评论 (0)