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

相关推荐
腥臭腐朽的日子熠熠生辉33 分钟前
解决maven失效问题(现象:maven中只有jdk的工具包,没有springboot的包)
java·spring boot·maven
ejinxian34 分钟前
Spring AI Alibaba 快速开发生成式 Java AI 应用
java·人工智能·spring
杉之40 分钟前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
圈圈编码1 小时前
Spring Task 定时任务
java·前端·spring
俏布斯1 小时前
算法日常记录
java·算法·leetcode
27669582921 小时前
美团民宿 mtgsig 小程序 mtgsig1.2 分析
java·python·小程序·美团·mtgsig·mtgsig1.2·美团民宿
爱的叹息1 小时前
Java 连接 Redis 的驱动(Jedis、Lettuce、Redisson、Spring Data Redis)分类及对比
java·redis·spring
程序猿chen1 小时前
《JVM考古现场(十五):熵火燎原——从量子递归到热寂晶壁的代码涅槃》
java·jvm·git·后端·java-ee·区块链·量子计算
松韬2 小时前
Spring + Redisson:从 0 到 1 搭建高可用分布式缓存系统
java·redis·分布式·spring·缓存
绝顶少年2 小时前
Spring Boot 注解:深度解析与应用场景
java·spring boot·后端