maven多依赖,由于包路径一样,导致引入类错乱

这个问题是典型的 JAR 包类冲突(Classpath Conflict)

强制让正确版本的类被优先加载

Maven 默认按 依赖声明顺序依赖深度 决定类路径顺序("nearest wins")。你可以:

✅ 在 pom.xml先声明 依赖A,再声明 依赖B
XML 复制代码
<dependencies>
  <!-- 先声明你想要的版本 -->
  <dependency>
    依赖A
  </dependency>

  <!-- 后声明 (它的 Utils 会被忽略) -->
  <dependency>
    依赖B
  </dependency>
</dependencies>

📌 Maven 的"最近优先"原则 :如果两个依赖提供同名类,在 classpath 中排在前面的 JAR 会被优先加载

虽然 Maven 不保证严格顺序,但在大多数情况下,先声明的依赖会排在前面

🔍 如何确认哪个 Utils 被加载?

在代码中加一行调试:

XML 复制代码
System.out.println(Utils.class.getProtectionDomain().getCodeSource().getLocation());

输出会告诉你这个类来自哪个 JAR 文件

<exclusion>(如果可行)

XML 复制代码
<dependency>
  依赖B
  <exclusions>
    <exclusion>
      <groupId>org.xx</groupId>
      <artifactId>*</artifactId>
    </exclusion>
    <!-- 或具体排除 -->
    <exclusion>
      <groupId>org.xx.tool</groupId>
      <artifactId>xx-xx-xx</artifactId>
    </exclusion>
  </exclusions>
</dependency>

⚠️ 如果 xx-xx-xx内部直接打包了 class(不是依赖),<exclusion> 无效

相关推荐
易雪寒13 小时前
Java List 根据List中对象的属性值是否相同作为同一组,分割成多个连续的子List
java·数据结构·list·分组切割
小王不爱笑13213 小时前
Kubernetes(K8s)核心知识点
java
桑榆肖物13 小时前
.NET 10 Native AOT 在 Linux 嵌入式设备上的实战
java·linux·.net·aot
墨着染霜华13 小时前
Java实战:封装Redis非阻塞分布式锁,彻底解决表单重复提交主键冲突
java·redis·分布式
启山智软13 小时前
【使用 Java(JSP)实现的简单商城页面前端示例】
java·前端·商城开发
一个有温度的技术博主13 小时前
Redis系列七:Java客户端Jedis的入门
java·数据库·redis
LSL666_14 小时前
BaseMapper——新增和删除
java·开发语言·mybatis·mybatisplus
后端AI实验室14 小时前
我让AI模拟面试官考了我一个小时,然后我沉默了
java·ai
金銀銅鐵14 小时前
Byte Buddy 生成的类的结构如何?(第二篇)
java·后端
StackNoOverflow14 小时前
Spring MVC零散知识点记录
java·spring·mvc