【问题标题】:Multi-module Maven/Spring boot project using <dependencies> vs. <dependencyManagement> tags?使用 <dependencies> 与 <dependencyManagement> 标签的多模块 Maven/Spring 启动项目?
【发布时间】:2021-04-29 18:28:23
【问题描述】:

我在谷歌搜索时参考了这篇文章,但对于在 pom.xml 中使用 &lt;dependencies&gt; XML 标记与在 多模块 Maven 中使用 &lt;dependencyManagement&gt; 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:

根据那个 ^ 帖子,&lt;dependencyManagement&gt; 标签似乎可以在多模块 Maven 项目中使用,以集中依赖的版本、范围等。用户说您仍然需要在子模块中的 &lt;dependencyManagement&gt; 封闭标记 AGAIN 中重新声明任何依赖项......这是真的吗?如果是这样,为什么不在父 POM 中使用常规封闭标记,因为所有子模块都将继承此依赖关系?我自己用 Spring Boot Starter Parent 测试了这个,我可以通过在我的根项目的父 POM 中声明它来看到,所有依赖项,如 spring-core、tomcat-embed-core 等都被“注入”到我的项目和所有 3 个子模块都可以使用这些依赖项

我想我不清楚使用&lt;dependencyManagement&gt;tag 相对于常规&lt;dependencies&gt; 的优势。如果我正确理解了 Maven POM 继承,那么在我的根 POM.xml 中的 &lt;parent&gt; XML 标记中声明的所有 Spring Boot Starter 依赖项都将注入到我的项目中,并且可以被任何子模块使用(这很好和我想要的)。此外,在我的根 POM.xml 中声明的带有&lt;dependency&gt; 标记(不在&lt;dependencyManagement&gt; 标记内)的任何依赖项都将被所有子模块继承,如果我不想要这种行为,我可以简单地定义依赖项使用该依赖项的特定子模块(以避免重复)。

【问题讨论】:

    标签: java spring-boot maven pom.xml dependency-management


    【解决方案1】:

    您可以在父项中定义通常的依赖项,并且它们被所有子项继承(如您所说)。如果这是您想要的行为,那么这很好。

    但是如果你只需要一些个模块中的依赖,但你想确保整个项目的版本是一致的,那么你可以在父级的dependencyManagement中定义版本POM,然后在需要的模块中添加依赖项(无版本)。

    【讨论】:

    • 怎么样?在我的多模块maven项目中,如果我在ROOT pom.xml(父级)中声明了maven-surefire-plugin和surefire-junit47等插件,是否需要在子模块POMS中重新声明所有这些插件?跨度>
    • 您可以使用&lt;pluginManagement&gt;控制插件的版本和默认配置。一旦你这样做了,你只需要通过在&lt;plugins&gt; 部分中放置一个带有groupIdartifactId 的条目来声明配置应该应用于某个模块。对于自动应用的插件,您甚至不需要。
    • @ennth 您应该只定义 maven-surefire-plugin,而不是 surefire-junit47 提供程序。这由依赖项控制,这意味着通过定义对 junit 4 的依赖项......
    猜你喜欢
    • 2018-02-02
    • 2016-03-27
    • 2016-03-15
    • 2022-01-08
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    相关资源
    最近更新 更多