# dependencyManagement 与 dependencies 的区别

46 阅读1分钟

dependencyManagement 与 dependencies 的区别

dependencies

  1. 直接依赖声明:在 `` 中使用场景
  2. 自动引入:所有列出的依赖都会被包含在项目中
  3. 版本必需:每个依赖必须指定版本号(除非在父POM的dependencyManagement中已定义)
  4. 作用范围:仅影响当前项目

dependencyManagement

  1. 依赖管理:只是声明依赖及其版本等信息,不实际引入依赖
  2. 版本控制中心:为子模块提供统一的版本管理
  3. 可选引入:子模块需要显式声明依赖(可不写版本号)才会真正引入
  4. 继承性:主要在父POM中使用,供子模块继承
  • 父POM:通常同时使用两者

    • dependencyManagement 统一管理版本
    • dependencies 声明父项目自身需要的依赖
  • 子模块

    • 只需 `` 声明实际需要的依赖(可省略版本号)
    • 从父POM继承版本控制

示例

父POM:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.3.8</version>
        </dependency>
    </dependencies>
</dependencyManagement><dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

子模块:

<dependencies>
    <!-- 从父POM继承版本 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
    </dependency>
    
    <!-- 需要其他依赖时指定 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.8</version>
    </dependency>
</dependencies>

这种机制有助于在多模块项目中统一管理依赖版本,避免版本冲突。声明的依赖会被项目直接使用