如何解决使用 <dependencies> 与 <dependencyManagement> 标签的多模块 Maven/Spring 启动项目?
我在谷歌搜索时参考了这篇文章,但仍然有一些关于在 pom.xml 中使用 <dependencies>
XML 标记与在 中使用 <dependencyManagement>
XML 标记之间的区别的问题多模块 Maven 项目:
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 - 它只是一个 Spring boot/Maven 项目,带有根 pom.xml(父)和三个子模块,每个子模块都有自己的 POM,它们继承自父 POM:
根据那个 ^ 帖子,似乎 <dependencyManagement>
标记可用于多模块 Maven 项目以集中依赖项的版本、范围等。用户表示您仍然需要在子模块中的 <dependencyManagement>
封闭标记 AGAIN 中重新声明任何依赖项......这是真的吗?如果是这样,为什么不只在父 POM 中使用常规封闭标记,因为所有子模块都将继承此依赖项?我自己用 Spring Boot Starter Parent 对此进行了测试,我可以通过在我的根项目的父 POM 中声明它来看到,所有依赖项,如 spring-core、tomcat-embed-core 等都“注入”到我的project 和所有 3 个子模块都可以使用这些依赖项
我想我不太清楚使用 <dependencyManagement>
标签相对于常规 <dependencies>
的优势。如果我正确理解了 Maven POM 继承,那么在我的根 POM.xml 的 <parent>
XML 标记中声明的所有 Spring Boot Starter 依赖项都被注入到我的项目中,并且可以被任何子模块使用(其中很好,是我想要的)。此外,在我的根 POM.xml 中使用 <dependency>
标记(不在 <dependencyManagement>
标记内)声明的任何依赖项都将被所有子模块继承,如果我不想要这种行为,我可以简单地在使用该依赖项的特定子模块中定义该依赖项(以避免重复)。
解决方法
您可以在父级中定义通常的依赖项,并且它们由所有子级继承(如您所说)。如果这是您想要的行为,那么这很好。
但是如果你只需要某些模块中的依赖,但是你想确保整个项目的版本是一致的,那么你可以在父级的dependencyManagement中定义版本POM,然后在需要的模块中添加依赖项(无版本)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。