zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    php面向对象开发的学习
    我的php感悟
    说说面向对象
    session,上传文件
    PHP构造函数的用法分析
    生成图片
    上传文件
    fetch
    ajax2
    ajax1
  • 原文地址:https://www.cnblogs.com/newblog/p/12372767.html
Copyright © 2011-2022 走看看