栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

浅谈两个jar包中包含完全相同的包名和类名的加载问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

浅谈两个jar包中包含完全相同的包名和类名的加载问题

首先从表现层介绍,后续后深入原理。

1、先简单介绍maven如何生成jar文件方便测试


    maven-assembly-plugin
    2.4
    
     
      jar-with-dependencies
     
     
      
Main.Main
      
     
    
    
     
      make-assembly
      package
      
single
      
     
    
   
配置了一个manifest标签来配置Main函数的入口。然后通过如下指令来实现打包。
 
mvn assembly:assembly

2、自定义两个jar包,其中包含相同包名和类名

与export的导入顺序有关。只会加载第一个,并且运行正常。

3、自定义jar和jdk包, 其中包含相同的包名和类名

与export的导入顺序有关。同样是只会加载第一个,但是如果加载自定义的jar运行会报错。加载 jdk正常。

protected Class loadClass(String name, boolean resolve)
  throws ClassNotFoundException
 {
  synchronized (getClassLoadingLock(name)) {
   // First, check if the class has already been loaded
   Class c = findLoadedClass(name);
   if (c == null) {
    long t0 = System.nanoTime();
    try {
     if (parent != null) {
      c = parent.loadClass(name, false);
     } else {
      c = findBootstrapClassOrNull(name);
     }
    } catch (ClassNotFoundException e) {
     // ClassNotFoundException thrown if class not found
     // from the non-null parent class loader
    }
 
    if (c == null) {
     // If still not found, then invoke findClass in order
     // to find the class.
     long t1 = System.nanoTime();
     c = findClass(name);
 
     // this is the defining class loader; record the stats
     sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
     sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
     sun.misc.PerfCounter.getFindClasses().increment();
    }
   }
   if (resolve) {
    resolveClass(c);
   }
   return c;
  }
 }

4、mvn jar包冲突常用命令

mvn dependency:analyze,mvn dependency:tree

以上这篇浅谈两个jar包中包含完全相同的包名和类名的加载问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/144499.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号