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继承

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

相关推荐
梦帮科技1 小时前
GRAVIS v4.0:基于Web的极速套利架构设计与实时数据流实现
前端·人工智能·rust·自动化·区块链·智能合约·数字货币
爱勇宝2 小时前
办公资料反复修改、补传、交接混乱,我做了个桌面工具来解决这件事
前端·后端·程序员
zt1985q2 小时前
本地部署开源智能家居集成平台 ioBroker 并实现外部访问( Windows 版本)
运维·服务器·智能家居
微信开发api-视频号协议2 小时前
企业微信外部群开发自动化实践过程
java·前端·微信·自动化·企业微信·ipad
甲维斯2 小时前
Fable5:20美金的顶级设计师!
前端·人工智能
kyriewen3 小时前
我同时用了 Claude Code、Cursor 和 Codex,说说三个工具的真实差距——2026 年选错工具比不用 AI 更浪费时间
前端·ai编程·claude
Jackson__3 小时前
为了拯救我的腰椎和颈椎,我做了款浏览器插件!
前端·javascript·开源
心心喵3 小时前
[linux] nohup和pm2的区别 进程保活
linux·运维·服务器
闲猫3 小时前
Python FastAPI + SQLAlchemy 入门教程:从零搭建你的第一个 Web 应用
前端·python·fastapi
林小帅4 小时前
NestJS v11 + Prisma v7 ESM 迁移配置解析
前端·javascript·后端