Maven的POM文件相关标签作用

在Maven的POM文件中,<dependencies><dependencyManagement> 是两个相关但用途不同的标签,主要区别如下:

<dependencies>(直接依赖声明)

  • 立即生效 :在此标签中声明的依赖会被直接引入到当前项目中

  • 自动下载:Maven会立即下载这些依赖到本地仓库

  • 传递性依赖:这些依赖的传递性依赖也会被自动引入

xml

复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.8</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<dependencyManagement>(依赖管理)

  • 仅声明版本 :在此标签中声明的依赖不会立即被引入项目

  • 版本统一管理:主要用于在父POM中统一管理依赖版本

  • 子模块继承:子模块引用这些依赖时无需指定版本号

父POM中的用法:

xml

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

子模块中的用法:

xml

复制代码
<dependencies>
    <!-- 无需指定版本,从父POM继承 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
</dependencies>

主要区别总结

特性 <dependencies> <dependencyManagement>
作用 直接引入依赖 管理依赖版本
是否下载 立即下载 不下载,仅声明
使用场景 单个模块 多模块项目的父POM
版本管理 每个依赖需指定版本 统一管理版本,子模块继承
传递性 有传递性依赖 无传递性

最佳实践

  • 在多模块项目中使用<dependencyManagement>统一管理依赖版本

  • 在子模块的<dependencies>中只需声明需要的依赖,版本从父POM继承

  • 这样可以确保整个项目使用统一的依赖版本,避免版本冲突

相关推荐
圣光SG几秒前
web操作题练习(五)
前端
邪修king1 分钟前
Re:Linux系统篇(四):权限Chapter--用户身份、权限位与目录权限三大核心问题
linux·运维·服务器
杉氧5 分钟前
弹性滚动的奥秘:在 Flutter 中使用 CustomScrollView 与 Sliver 打造极致流畅列表
android·前端·flutter
jinshw13 分钟前
自己实现GIS配图软件(二)
前端·后端·rust
肥胖小羊17 分钟前
企业微信自建应用多环境联调与路由代理方案
服务器·前端·网络
林间码客17 分钟前
全栈视角下的 Mock 指南:从后端单元测试到前端 Vue 3 联调
前端·vue.js·单元测试
Alan_69121 分钟前
第三方API对接的通用封装模式
服务器·开发语言·php
Cobyte26 分钟前
手写 Rollup 插件实现解析 Vue 文件
前端·javascript·vue.js
buhuizhiyuci38 分钟前
【Linux 篇】数字世界的通信管道 —— 匿名管道与进程池深度实战解析
linux·运维·服务器
IT_陈寒43 分钟前
Vue的这个响应式陷阱,我调试了一整天才爬出来
前端·人工智能·后端