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

  最近在进行服务的环境升级,将 服务的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如下:

<Resources>
<PreResources base="d://webapps/ROOT/WEB-INF/lib/sms.reyo.cn.jar"
className="org.apache.catalina.webresources.JarResourceSet"
webAppMount="/WEB-INF/classes"/>
</Resources>

  

最新文章

  1. JavaScript学习笔记4之 ByClass&amp;json
  2. webstorm编辑RN代码提示功能
  3. 点我吧工作总结(技术篇) Velocity
  4. ASP.NET Web API 简介
  5. Python的平凡之路(6)
  6. Jsoup的demao
  7. Redhat 6.3中syslog信息丢失
  8. JQueryEasyUI学习简单Demo
  9. Linux 容器 vs 虚拟机 —— 谁更胜一筹
  10. 【Visual C++】游戏编程学习笔记之九:回合制游戏demo(剑侠客VS巡游天神)
  11. c/c++柔性数组成员
  12. ansible jenkins war
  13. How to SHA1 on macOS
  14. 《JavaScript Dom 编程艺术》读书笔记-第7章
  15. Luogu P1962 斐波那契数列(矩阵乘法模板)
  16. 记录一次优化mysql查询语句的方法
  17. Shell脚本:向磁盘中批量写入数据
  18. opencv-python 学习初探1
  19. 【Java面试题】42 TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!
  20. 理解Javascript的Event Loop

热门文章

  1. 为什么Linux需要虚拟内存 [转载好文]
  2. IOS AND Android 配置Fiddler环境
  3. 解决Qt5 mouseMoveEvent事件不能直接触发
  4. 文件服务器 — File Browser
  5. MySQL进阶实战6,缓存表、视图、计数器表
  6. 【Shell案例】【小数点scale&amp;bc】14、求平均值
  7. swiper3踩坑
  8. day35-JSON&amp;Ajax03
  9. ArcObjects SDK开发 021 开发框架搭建-FrameWork包设计
  10. go_json_learn