Maven中的DependencyManagement和Dependencies

Maven中的DependencyManagement和Dependencies

Dependencies

Dependencies是Maven项目中用来声明项目依赖的部分。在pom.xml文件中的<dependencies>部分,你可以直接列出项目所依赖的库(artifacts)。每个依赖通常包括以下信息:

  • GroupId:依赖的组织的唯一标识符。

  • ArtifactId:依赖的项目的唯一标识符。

  • Version:依赖的具体版本号。

  • Scope:依赖的范围(如compile, test, provided等)。

    例如:

    java 复制代码
    复制<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

DependencyManagement

Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。

DependencyManagement部分用于管理项目中所有依赖的版本号。它位于pom.xml文件中的<dependencyManagement>部分。通过DependencyManagement,你可以集中指定依赖的版本,而不必在每个<dependency>中重复指定。这样做的好处是:

  • 集中管理:所有依赖的版本都在一个地方管理,便于统一更新和维护。

  • 继承:当你的项目被其他项目继承时,子项目可以继承父项目的依赖管理策略,但也可以覆盖特定依赖的版本。

    例如:

    java 复制代码
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

使用pom.xml 中的dependencyManagement 元素能让所有在子项目中引用一个依赖而不用显式的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement 元素的项目,然后它就会使用这个

区别和联系

  • Dependencies:直接声明依赖的具体信息,包括版本号。

  • DependencyManagement:声明依赖的版本号,但不直接声明依赖的其他信息(如GroupId和ArtifactId)。它用于集中管理依赖的版本,以便于维护和继承。

    当一个项目继承另一个项目时,子项目会继承父项目的DependencyManagement配置,但可以覆盖或添加自己的Dependencies。如果子项目中声明的依赖没有指定版本号,Maven会从父项目的DependencyManagement中查找并使用相应的版本。

总结

这样做的好处就是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,优势:

1 这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改 ;
2 另外如果某个子项目需要另外的一个版本,只需要声明versio
  • dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。

  • 如果不在子项目中声明依赖,是不会从父项目中继承下来的,只有在子项目中写了该依赖项并且没有指定具体版本,才会从父项目中继承该项 且version和scope都读取自父pom;

  • 如果子项目中指定了版本号,那么会使用子项目中指定的jar版本


    总结来说,Dependencies用于声明项目所需的具体依赖,而DependencyManagement用于集中管理这些依赖的版本号,两者共同工作以实现依赖的灵活和有效管理。

ependencies用于声明项目所需的具体依赖,而DependencyManagement`用于集中管理这些依赖的版本号,两者共同工作以实现依赖的灵活和有效管理。

相关推荐
ok!ko1 小时前
设计模式之原型模式(通俗易懂--代码辅助理解【Java版】)
java·设计模式·原型模式
2402_857589361 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
吾爱星辰2 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
哎呦没3 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
编程、小哥哥3 小时前
netty之Netty与SpringBoot整合
java·spring boot·spring
IT学长编程4 小时前
计算机毕业设计 玩具租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·玩具租赁系统
莹雨潇潇4 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
杨哥带你写代码4 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端
郭二哈5 小时前
C++——模板进阶、继承
java·服务器·c++
A尘埃5 小时前
SpringBoot的数据访问
java·spring boot·后端