在 Maven 项目中,dependencies 和 dependencyManagement 是 pom.xml 文件里用于管理依赖的重要元素,下面为你详细介绍它们的区别和用法。
1区别
1.1功能不同
dependencies:直接声明项目所需的依赖项。Maven 会根据 dependencies 中声明的依赖,将这些依赖的 JAR 文件下载到本地仓库,并在项目编译、测试、运行等阶段使用这些依赖。
dependencyManagement:主要用于对依赖项的版本进行统一管理。它本身并不会引入依赖,只是定义了依赖的版本和其他配置信息,子模块可以继承这些配置,避免在多个模块中重复声明相同依赖的版本。
1.2对依赖引入的影响不同
dependencies:一旦在 dependencies 中声明了某个依赖,该依赖就会被引入到项目中。
dependencyManagement:仅声明依赖的版本和配置信息,子模块需要显式地在 dependencies 中声明该依赖,才会将其引入项目。
2用法
2.1dependencies 的用法
在 pom.xml 文件中,dependencies 元素用于包含多个 dependency 子元素,每个 dependency 子元素代表一个具体的依赖项。示例如下:
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.3.12.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>2.3.12.RELEASE</version>
        <scope>test</scope>
    </dependency>
</dependencies>
在上述示例中,声明了两个依赖项:spring-boot-starter-web 和 spring-boot-starter-test。scope 元素用于指定依赖的作用范围,如 test 表示该依赖仅在测试阶段使用。
2.2dependencyManagement 的用法
dependencyManagement 元素通常用于父项目的 pom.xml 文件中,用于统一管理子模块的依赖版本。示例如下:
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.3.12.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.3.12.RELEASE</version>
        </dependency>
    </dependencies>
</dependencyManagement>
在子模块的 pom.xml 文件中,只需在 dependencies 中声明依赖,无需指定版本,Maven 会使用父项目 dependencyManagement 中定义的版本。示例如下:
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
如果子模块需要使用不同的版本,可以在子模块的 dependencies 中显式指定版本,这样会覆盖父项目 dependencyManagement 中定义的版本。示例如下:
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.4.0.RELEASE</version>
    </dependency>
</dependencies>
3总结
dependencies 用于直接引入项目所需的依赖项,是项目实际使用的依赖。
dependencyManagement 用于统一管理依赖的版本,避免在多个模块中重复声明相同依赖的版本,提高项目的可维护性。通过在父项目中使用 dependencyManagement,子模块可以继承依赖的版本配置,同时也可以根据需要覆盖这些配置。
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号