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类加载中的父类委派机制,解决的是重复加载问题,而不是类加载的顺序。

    学习使我充实,分享给我快乐!
  • 相关阅读:
    C#获取屏幕鼠标所指点的颜色
    C#连接SQLServer数据库基本实现
    论文摘要写法
    红黑树
    递归、迭代和分治法
    逻辑右/左移与算术右/左移
    C 中数字数据类型在不同机器上所占字节数
    十进制转十六进制
    c带头结点的单链表逆置
    求一维数组长度误区
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/15722741.html
Copyright © 2011-2022 走看看