【发布时间】:2021-04-29 18:28:23
【问题描述】:
我在谷歌搜索时参考了这篇文章,但对于在 pom.xml 中使用 <dependencies> XML 标记与在 多模块 Maven 中使用 <dependencyManagement> XML 标记之间的区别仍有一些疑问项目:
https://stackoverflow.com/questions/2619598/differences-between-dependencymanagement-and-dependencies-in-maven#:~:text=Dependency%20Management%20allows%20to%20consolidate,that%20inherits%20a%20common%20parent.
这是我项目结构的 draw.io - 它只是一个带有根 pom.xml(父)和三个子模块的 Spring boot/Maven 项目,每个子模块都有自己的 POM 继承自父 POM:
根据那个 ^ 帖子,<dependencyManagement> 标签似乎可以在多模块 Maven 项目中使用,以集中依赖的版本、范围等。用户说您仍然需要在子模块中的 <dependencyManagement> 封闭标记 AGAIN 中重新声明任何依赖项......这是真的吗?如果是这样,为什么不在父 POM 中使用常规封闭标记,因为所有子模块都将继承此依赖关系?我自己用 Spring Boot Starter Parent 测试了这个,我可以通过在我的根项目的父 POM 中声明它来看到,所有依赖项,如 spring-core、tomcat-embed-core 等都被“注入”到我的项目和所有 3 个子模块都可以使用这些依赖项
我想我不清楚使用<dependencyManagement>tag 相对于常规<dependencies> 的优势。如果我正确理解了 Maven POM 继承,那么在我的根 POM.xml 中的 <parent> XML 标记中声明的所有 Spring Boot Starter 依赖项都将注入到我的项目中,并且可以被任何子模块使用(这很好和我想要的)。此外,在我的根 POM.xml 中声明的带有<dependency> 标记(不在<dependencyManagement> 标记内)的任何依赖项都将被所有子模块继承,如果我不想要这种行为,我可以简单地定义依赖项使用该依赖项的特定子模块(以避免重复)。
【问题讨论】:
标签: java spring-boot maven pom.xml dependency-management