依赖管理和maven中的依赖关系之间的差异
dependencyManagement
和dependencies
什么区别? 我在Apache Maven网站上看到了这些文档。 似乎可以在其子模块中使用在dependencyManagement下定义的dependencyManagement
,而无需指定版本。
例如:
父项目(Pro-par)在dependencyManagement下定义依赖dependencyManagement
:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8</version>
</dependency>
</dependencies>
</dependencyManagement>
然后在Pro-par的孩子中,我可以使用junit:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
但是,我想知道是否有必要在父pom中定义junit? 为什么不直接在需要的模块中定义?
依赖管理允许整合和集中依赖版本的管理,而无需添加所有子节点继承的依赖关系。 当你有一组继承公共父项目的项目 (即多个项目 )时,这是特别有用的。
另一个非常重要的dependencyManagement
用例是对传递依赖中使用的工件版本的控制。 没有一个例子,这很难解释。 幸运的是,这在文档中有所说明。
我对这个问题迟迟没有采取行动,但我认为它比接受的更为明确(这是正确的,但没有强调你需要推断出的实际重要部分)。
在父POM中, <dependencies>
和<dependencyManagement>
之间的主要区别是:
在<dependencies>
部分中指定的工件将始终作为子模块的依赖项包含在内。
在指定的工件<dependencyManagement>
部分,将只被包括在子模块中,如果他们在还指定<dependencies>
子模块本身的部分。 你问为什么好? 因为您在父级中指定了版本和/或作用域,并且可以在指定子POM中的依赖关系时将其忽略。 这可以帮助您将统一版本用于子模块的依赖关系,而无需在每个子模块中指定版本。
就像你说的那样; dependencyManagement
用于将所有依赖信息提取到一个公共的POM文件中,从而简化了子POM文件中的引用。
当您有多个不想在多个子项目下重新输入的属性时,它会变得很有用。
最后,可以使用dependencyManagement
来定义要在多个项目中使用的工件的标准版本。
上一篇: differences between dependencymanagement and dependencies in maven