tomcat7 与 tomcat8 加载 jar包的顺序

足彩365 2025-08-22 23:45:39 阅读: 4010

本文为博主原创,转载请注明出处:

最近在进行服务的环境升级,将 服务的tomcat7升级到 tomcat8;当把 tomcat 升级到 tomcat8 的时候,进行服务启动异常,报 jar 包冲突的 异常,但是尝试几次之后,偶尔也有成功的概率,便推测 是 jar 包加载的顺序不对,因为 当相同路径的类或资源在加载之后,便不会进行再加载,由于项目中有两个相同的全限定名的类,在服务启动的时候,加载错误的类的时候,便报jar包冲突。

于是便设置 classpath,但发现设置 classpath 也没有生效,通过查看资料以及阅读 tomcat 的源码,发现 tomcat7 与 tomcat8 的类加载逻辑是不一样的,tomcat 7 在加载jar包 路径下的资源后,会对 所有的 jar包根据 字母顺序进行排序,字母在前面的 jar 包会优先加载,

tomcat7加载 jar包顺序

主要代码如下:

list是获得了应用中WEB-INF下lib下所有jar包的路径。我们跟踪进去发现`FileDirContext` 的list方法中有下面这一句:

tomcat8加载

主要的代码:

进一步继续,直接file.list获取过滤jar,并没有排序

tomcat8 设置优先加载顺序

code如下:

className="org.apache.catalina.webresources.JarResourceSet"

webAppMount="/WEB-INF/classes"/>