当我们启动一个tomcat的服务的时候,jar包和claess文件加载顺序:

1. $java_home/lib 目录下的java核心api

2. $java_home/lib/ext 目录下的java扩展jar包

3. java -classpath/-Djava.class.path所指的目录下的类与jar包

4. $CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载

5. $CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载

6. $CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载

7. 我们的项目路径/WEB-INF/classes下的class文件

8. 我们的项目路径/WEB-INF/lib下的jar文件

Tomcat8.0以前在同一个文件夹下,jar包是按顺序从上到下依次加载

由ClassLoader的双亲委托模式加载机制我们可以知道,假设两个包名和类名完全相同的class文件不再同一个jar包,如果一个class文件已经被加载java虚拟机里了,那么后面的相同的class文件就不会被加载了。

Tomcat8.0后同一目录下的jar包加载顺序有变化,不像以前一样是按照字母顺序排序了,

导致了项目在某些机器启动正常,某些机器上类加载顺序不对导致的NoClassDefFoundError

的错误,根本原因是某些低质量的jar包冲突导致的,一旦这些包都是第三方的包尤其是第三方厂商

的包,很难去进行替换。这是就需要某种方法强行将某个包的加载顺序提到前面来,这是可以在

tomcat的conf目录下修改context.xml文件,加上如下语句就可以办到了:

<Resources>
        <PreResources className="org.apache.catalina.webresources.FileResourceSet"                
                base="${catalina.base}/webapps/你的项目名称/WEB-INF/lib/提到前面来的冲突jar包名.jar"                 
                webAppMount="/WEB-INF/lib/提到前面来的冲突jar包名.jar" />
    </Resources>

最新文章

  1. command shell 的知识整理
  2. Centos 内存占满 释放内存
  3. 【轮子】发现一个效果丰富酷炫的Android动画库
  4. HSV色彩空间
  5. 阻塞队列BlockingQueue用法
  6. 内部类中class声明地方不同,效果不一样
  7. zookeeper 监控 —— 阿里taokeeper
  8. iOS10相机等崩溃
  9. JavaScript 获取 Div 的坐标
  10. HttpWatch工具简介及使用技巧(转载)
  11. 2017-5-18 Repeater 重复器的使用
  12. [APIO2008]
  13. VMware密匙
  14. 深度学习原理与框架-Tensorboard可视化展示(代码) 1.tf.reuse_default_graph(进行结构图的重置) 2.tf.summary.FileWriter(writer实例化) 3. write.add_graph(graph的写入) 4. tf.summary.merge_all(将summary进行合并) 5.write.add_summary(将所有summary)
  15. 常用命令-python篇
  16. 浅拷贝和深拷贝(java)
  17. centos7.5下yum 安装mariadb数据库
  18. 马士兵hadoop第四课:Yarn和Map/Reduce配置启动和原理讲解
  19. ionic_ Network connectivity error occurred, are you offline?
  20. WIN下Git GUI 教程

热门文章

  1. VUE.JS和小程序的共通之处
  2. springmvc教程(1)
  3. win10下python3安装深度学习一般要用的库
  4. PyCharm无法找到已安装的Python类库的解决方法
  5. Docker registry自签名证书
  6. MQTT v5 (MQTT 5.0) 新特性介绍
  7. node批量修改文件名称
  8. POJ 3579:Median 差值的中位数
  9. 033、Java中使用简化运算符
  10. 1.Maven分模块,分工程管理,多Web应用合并war包