当前位置: 首页 > article >正文

maven中<dependencyManagement>与<dependencies>两个标签的区别

在 Maven 的 pom.xml 文件中,<dependencyManagement> 和 <dependencies> 是两个非常重要的标签,但它们的作用和使用场景不同。以下是它们的详细区别:


1. <dependencies> 标签

  • 作用

    • 用于声明项目直接依赖的库(artifacts)。

    • 在 <dependencies> 中声明的依赖会立即生效,Maven 会下载这些依赖并将其添加到项目的类路径中。

  • 使用场景

    • 当你需要在项目中直接使用某个库时,将其添加到 <dependencies> 中。

  • 示例

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>2.0.7</version>
        </dependency>
    </dependencies>

    运行 HTML

  • 特点

    • 依赖会立即生效。

    • 子模块会继承父模块的 <dependencies> 中的依赖。


2. <dependencyManagement> 标签

  • 作用

    • 用于集中管理依赖的版本和配置,但不会直接引入依赖

    • 在 <dependencyManagement> 中声明的依赖只是定义了依赖的版本和范围,只有在子模块或 <dependencies> 中显式引用时,才会真正引入依赖。

  • 使用场景

    • 在多模块项目中,统一管理依赖的版本。

    • 避免在多个模块中重复定义依赖的版本。

  • 示例

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>2.0.7</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    运行 HTML

  • 特点

    • 依赖不会立即生效,只有在子模块或 <dependencies> 中引用时才会生效。

    • 子模块会继承父模块的 <dependencyManagement> 中的依赖定义。


3. 主要区别

特性<dependencies><dependencyManagement>
作用直接引入依赖管理依赖的版本和配置,不直接引入依赖
依赖是否立即生效
使用场景项目直接依赖的库多模块项目中统一管理依赖版本
子模块是否继承
是否需要在子模块中引用不需要需要在子模块中显式引用

4. 实际使用示例

父模块的 pom.xml

在父模块中,使用 <dependencyManagement> 统一管理依赖版本:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>2.0.7</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
子模块的 pom.xml

在子模块中,只需引用依赖,不需要指定版本(版本由父模块统一管理):

<project>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>parent-project</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>child-project</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
    </dependencies>
</project>

5. 总结

  • <dependencies>:用于直接引入依赖,依赖会立即生效。

  • <dependencyManagement>:用于集中管理依赖的版本和配置,依赖不会立即生效,只有在子模块或 <dependencies> 中引用时才会生效。

在多模块项目中,通常使用 <dependencyManagement> 来统一管理依赖版本,避免重复定义和版本冲突。


http://www.kler.cn/a/469881.html

相关文章:

  • js可不使用document直接根据id获取id元素
  • C++ constexpr(八股总结)
  • 【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】
  • unity学习8:unity的基础操作 和对应shortcut
  • FreeSWITCH dialplan/default.xml 之释疑
  • Python爬虫基础——认识网页结构(各种标签的使用)
  • 十四、Vue 混入(Mixins)详解
  • 谷云科技iPaaS V7.0+企业级AI Agent产品全新发布
  • Web网页制作之JavaScript的应用
  • 解决在VS2019/2022中编译c++项目报错fatal error C1189: #error : “No Target Architecture“
  • python 操作xml文件
  • 5G工业路由器品牌,5G赋能,重塑工业路由器新标杆
  • LabVIEW项目如何选择数据库
  • 【shell编程】报错信息:Redirection Error(包含7种解决方法)
  • 【记录】Angr|Angr 的 call_state 是怎么保证不同架构的函数的参数正常传递进去的?
  • 古玩玉器交易系统|Java|SSM|VUE| 前后端分离
  • 云服务器+docker配置Java程序运行环境
  • VUE3组合式——响应式数据ref、reactive
  • Javascript算法——贪心算法(一)
  • jupyter出现“.ipynb appears to have died. It will restart automatically.”解决方法
  • 函数指针的用法
  • 反射能做什么
  • php Yii2 Excel导出图片资源到表格
  • WebAssembly(WASM) + Python: 构建高性能跨平台Web应用
  • 自定义校验注解
  • 文件上传漏洞 (网络安全)