在 Maven 项目中,当 A 项目依赖了 B 组件,而 B 组件也依赖了 mybatis-plus-generator
但版本不同(A: 3.5,B: 3.6),最终 A 项目会使用的 mybatis-plus-generator
版本取决于 Maven 的依赖解析规则。
🔍 Maven 依赖解析规则
Maven 解析依赖版本时,采用 最近依赖优先(Nearest Wins) 原则:
- 直接依赖优先级高:如果 A 项目在
pom.xml
直接声明了mybatis-plus-generator
版本(如 3.5),那么 A 仍然会使用 3.5,即使 B 组件使用的是 3.6。 - 间接依赖继承:如果 A 没有直接声明
mybatis-plus-generator
版本,而 B 依赖了 3.6,那么 A 项目会使用 3.6。 - 依赖管理 (
dependencyManagement
):如果 A 项目中dependencyManagement
指定了mybatis-plus-generator
版本(如 3.5),则 所有子依赖(包括 B)都会强制使用 3.5。
🛠 如何确定最终使用的版本?
你可以在 A 项目根目录执行以下命令:
mvn dependency:tree
会输出类似的依赖关系:
[INFO] com.example:A:1.0
[INFO] ├── com.example:B:1.0
[INFO] │ └── com.baomidou:mybatis-plus-generator:3.6
[INFO] └── com.baomidou:mybatis-plus-generator:3.5 (omitted for conflict)
这里 omitted for conflict
表示 Maven 最终采用的是 3.6。
📌 解决方案
✅ 强制使用 A 项目的 3.5 版本
如果你想让 A 项目始终使用 mybatis-plus-generator
3.5,可以在 A 项目的 pom.xml
里显式声明:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5</version>
</dependency>
✅ 在 dependencyManagement
里锁定版本
如果 A 项目是一个父项目,且有多个子模块或依赖了多个版本,可以在 dependencyManagement
中指定版本:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5</version>
</dependency>
</dependencies>
</dependencyManagement>
这样 所有模块(包括 B 组件)都会使用 3.5 版本。
📌 结论
情况 | 最终使用的 mybatis-plus-generator 版本 |
---|---|
A 直接声明 3.5 | 3.5 |
A 没有声明,B 依赖 3.6 | 3.6 |
A 在 dependencyManagement 锁定 3.5 | 3.5 |
你可以执行 mvn dependency:tree
进一步确认实际的版本。 🚀