zoukankan      html  css  js  c++  java
  • maven包加载顺序和jvm类加载顺序

    一、mvaven jar包加载顺序

    Maven对版本不同的相同依赖包生效优先级:

    1. 不同依赖层级深度的遵从【最短路径优先】原则。

    2. 具有相同依赖层级深度的遵从pom中【最先声明优先】原则。

    二、JVM类加载顺序

    相同的类指:类的全限定名一样
    问题:怎么优先加载自己写的类

    1. 解析:

      class文件所在位置, 直接在classpath下,在jar包中:

    • a.相同的类, 一个在web-inf/classes目录下, 一个在jar包中: 此时优先加载classes目录下的class文件。
    • b.相同的类, 都在jar包中:此时按照jar的装载顺序, 简单的如果没有其他的特殊处理, 就按照jar包的名字排序。 如先加载aa.jar中的文件,再加载bb.jar中的文件。
    1. 结论
    • a.将.class文件放在classes文件夹下
    • b.如果所有的class被打包为jar,就修改jar包的名字,保证先加载自己的jar包。

    maven的加载类的机制也是文中b类结论,而不是很多博客中说的pom声明顺序,pom声明顺序可能只能保证jar包加载顺序,而class加载顺序通过声明顺序解决不了。

    值得说的是,maven打成的jar包名称是以artifactId决定的,所以修改artifactId首字母就能准确的保证哪个包中的同名class先被加载了。

    jvm类加载中的父类委派机制,解决的是重复加载问题,而不是类加载的顺序。

    学习使我充实,分享给我快乐!
  • 相关阅读:
    关于dependency的scope
    Enum
    vim
    postgres函数
    Static块与线程安全
    查看文件夹及文件大小df du
    mac下安装jdk
    硬盘修复原理
    关于Jquery的Accordion在IE下闪烁,不稳定的问题
    vmare安装linux问题总结4(redhat在启动时卡在sendmail很久)
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/15722741.html
Copyright © 2011-2022 走看看