Maven中的DependencyManagement和Dependencies
Dependencies
Dependencies是Maven项目中用来声明项目依赖的部分。在pom.xml文件中的<dependencies>部分,你可以直接列出项目所依赖的库(artifacts)。每个依赖通常包括以下信息:
-  GroupId:依赖的组织的唯一标识符。 
-  ArtifactId:依赖的项目的唯一标识符。 
-  Version:依赖的具体版本号。 
-  Scope:依赖的范围(如compile, test, provided等)。 例如: 复制<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>中重复指定。这样做的好处是:
-  集中管理:所有依赖的版本都在一个地方管理,便于统一更新和维护。 
-  继承:当你的项目被其他项目继承时,子项目可以继承父项目的依赖管理策略,但也可以覆盖特定依赖的版本。 例如: <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`用于集中管理这些依赖的版本号,两者共同工作以实现依赖的灵活和有效管理。