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