tomcat加载jar异常问题的分析与解决

2019-10-18 20:12:00于海丽

方法processURLs(...)

该方法会对当前classloader的所有jar,也就是对classPathUrlsToProcess进行堆栈操作,然后处理每一个jar包。关键代码如下所示。

方法process()

该方法会对每一个jar进行加载及分析处理,该方法中重点关注

processManifest(jar, isWebapp, classPathUrlsToProcess)

方法 processManifest

该方法会处理jar中的Manifest文件,对Manifest文件中的Class-Path进行分隔处理,对其中的内容作为新的依赖jar再插入到classPathUrlsToProcess中(processURLs方法会按照堆栈结果加载其中的jar)

原因分析

其实问题就是出Manifest文件中的classpath,通过分析代码我们知道tomcat除了加载了我们maven管理的jar包之外,还会对jar中的manifest文件进行分析,如果其中存在classpath,他会将其中的内容也添加jar包依赖中,并对这些jar包进行加载。