• jar类库加载顺序


    当我们启动一个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>

  • 相关阅读:
    MYSQL最大连接数设置
    判断闰年
    Hanoi塔问题(递归)
    字符串替换(find函数和replace函数)
    全排列问题(next_permutation函数)
    南阳理工 oj 题目739 笨蛋难题四
    (c++实现)南阳理工 题目325 zb的生日
    (c++实现)南洋理工 oj 267 郁闷的C小加(二)
    (c++实现)南阳理工acm 题目117 求逆序数
    (c++实现) 南洋理工acm 题目2 括号配对问题
  • 原文地址:https://www.cnblogs.com/newblog/p/12372767.html
Copyright © 2020-2023  润新知