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`用于集中管理这些依赖的版本号,两者共同工作以实现依赖的灵活和有效管理。

相关推荐
Sylvia-girl2 小时前
Java——抽象类
java·开发语言
Touper.5 小时前
Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)
java·数据库·redis
m0_535064605 小时前
C++模版编程:类模版与继承
java·jvm·c++
虾条_花吹雪6 小时前
Using Spring for Apache Pulsar:Message Production
java·ai·中间件
tomorrow.hello6 小时前
Java并发测试工具
java·开发语言·测试工具
Moso_Rx6 小时前
javaEE——synchronized关键字
java·java-ee
张小洛6 小时前
Spring AOP 是如何生效的(入口源码级解析)?
java·后端·spring
DKPT7 小时前
Java设计模式之行为型模式(观察者模式)介绍与说明
java·笔记·学习·观察者模式·设计模式
追风少年浪子彦7 小时前
mapstruct与lombok冲突原因及解决方案
java·spring boot·spring·spring cloud
why技术7 小时前
也是出息了,业务代码里面也用上算法了。
java·后端·算法