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

发布时间 - 2026-01-11 03:06:10    点击率:

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

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

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4</version>
    <configuration>
     <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
     </descriptorRefs>
     <archive>
      <manifest>
       <mainClass>Main.Main</mainClass>
      </manifest>
     </archive>
    </configuration>
    <executions>
     <execution>
      <id>make-assembly</id>
      <phase>package</phase>
      <goals>
       <goal>single</goal>
      </goals>
     </execution>
    </executions>
   </plugin>
配置了一个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包中包含完全相同的包名和类名的加载问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# 两个jar包有相同的类  # Java中tomcat memecached session 共享同步问题的解决办法  # TOMCAT内存溢出及大小调整的实现方法  # Tomcat实现session共享(session 会话复制)  # tomcat8改了jar加载顺序的踩坑记录  # 使用tomcat设定shared lib共享同样的jar  # 加载  # 自定义  # 第一个  # 只会  # 给大家  # 其中包含  # 希望能  # 这篇  # 报错  # 浅谈  # 来实现  # 小编  # 大家多多  # 完全相同  # 包中  # execution  # id  # phase  # mainClass  # manifest 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  如何用腾讯建站主机快速创建免费网站?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  详解jQuery中的事件  原生JS获取元素集合的子元素宽度实例  香港服务器如何优化才能显著提升网站加载速度?  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  网易LOFTER官网链接 老福特网页版登录地址  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  详解jQuery停止动画——stop()方法的使用  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  如何选择可靠的免备案建站服务器?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  如何确保西部建站助手FTP传输的安全性?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  如何快速搭建高效WAP手机网站?  Linux系统运维自动化项目教程_Ansible批量管理实战  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel安装步骤详细教程_Laravel环境搭建指南  如何为不同团队 ID 动态生成多个“认领值班”按钮  如何在万网ECS上快速搭建专属网站?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  如何在七牛云存储上搭建网站并设置自定义域名?  Laravel Docker环境搭建教程_Laravel Sail使用指南  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  EditPlus中的正则表达式 实战(4)  重庆市网站制作公司,重庆招聘网站哪个好?  七夕网站制作视频,七夕大促活动怎么报名?  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  如何用JavaScript实现文本编辑器_光标和选区怎么处理  使用C语言编写圣诞表白程序  高端云建站费用究竟需要多少预算?  如何快速建站并高效导出源代码?