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

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

相关推荐
han_2 分钟前
JavaScript设计模式(二):策略模式实现与应用
前端·javascript·设计模式
x***r1516 分钟前
Notepad++ 8.6 安装教程:详细步骤+自定义安装路径(附注意事项)
linux·前端·javascript
Hilaku9 分钟前
为什么很多工作 5 年的前端,身价反而卡住了?🤷‍♂️
前端·javascript·面试
ai超级个体10 分钟前
前端下午茶:这 3 个网页特效建议收藏(送源码)
前端·three.js·threejs·网页设计·vibe coding·网页灵感·网页分享
维斯1810 分钟前
VueFlow 图自适应容器尺寸教程
前端
helloweilei10 分钟前
next/dynamic和React.lazy的区别
前端·next.js
Aaron_Feng14 分钟前
一个小工具解决Swift Actor重入问题
前端
笨笨狗吞噬者14 分钟前
维护 uniapp 小程序端近一年,我想拉一个开发者交流群
前端·程序员·uni-app
前端炒粉20 分钟前
React 面试高频题
前端·react.js·面试
程序员陆业聪22 分钟前
让 Android 里的 AI 真正「干活」:Function Calling 工程实现全解
前端