Maven 的依赖解规则

在 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.53.5
A 没有声明,B 依赖 3.63.6
A 在 dependencyManagement 锁定 3.53.5

你可以执行 mvn dependency:tree 进一步确认实际的版本。 🚀

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注