正确使用多模块maven项目的方法

Gil*_*ian 4 java maven maven-module

在Maven多模型中,我们有一个父pom,其中模块在<modules>tag中定义,在每个模块中,我们定义父pom是谁.

为什么这个双向定义?
为什么不在模块的父部分中定义它们之间的关系?
如果模块总是绑定到父模块,我应该如何重用模块?

dav*_*xxx 10

为什么这2路定义?

这不是强制性的.这是一个设计选择.

为什么不在父母中定义?

如果仅在modules父pom 的标记中定义它们 ,则只使用Maven的reactor/aggregation功能.

1)聚合(<modules>超级聚合器项目中的声明)主要提供以下功能:

收集要构建的所有可用模块

将项目排序为正确的构建顺序

按顺序构建选定的项目

通过声明要在父pom中聚合的模块来启用聚合模块:

<modules>
    <module>my-child</module>
    <module>my-other-child</module>
</modules>
Run Code Online (Sandbox Code Playgroud)

但聚合不提供继承.

2)项目继承(<parent>子模块中的声明)提供从父声明到子模块的多个东西的继承:

从实际文档中,父POM的大多数元素都由其子元素继承.
:

的groupId

描述

网址

inceptionYear

组织

许可证

开发商

贡献者

邮件列表

SCM

issueManagement

ciManagement

性能

dependencyManagement

依赖

资料库

pluginRepositories

建立

具有匹配ID的插件执行

插件配置

报告

型材

通过在子poms中声明父工件来启用继承:

<parent>
    <groupId>my-group</groupId>
    <artifactId>my-parent</artifactId>
    <version>1.0.0</version>
</parent>

<!-- You can note that groupId and version are not filled for the current project.
 These are optional as inherited from the parent -->
<artifactId>my-artifact</artifactId>
Run Code Online (Sandbox Code Playgroud)

实际上,您可以使用项目继承,项目组合,不使用它们或两者.
根据项目与其要求之间的关系,这应该是一个设计选择.

您可以参考有关这两个功能的Maven文档中的这个有趣点:

项目继承与项目聚合

如果你有几个Maven项目,并且它们都有类似的配置,你可以通过拉出那些类似的配置并制作一个父项目来重构你的项目.因此,您所要做的就是让您的Maven项目继承该父项目,然后将这些配置应用于所有这些项目.

如果您有一组一起构建或处理的项目,则可以创建父项目并让该父项目将这些项目声明为其模块.通过这样做,你只需要建立父母,其余的将遵循.

但是,当然,您可以同时拥有Project Inheritance和Project Aggregation.这意味着,您可以让您的模块指定父项目,同时让该父项目将这些Maven项目指定为其模块.

  • 直到这一刻,我一直在寻找这个答案,并且刚刚找到了。这就是maven中子模块和父模块的区别。问题的标题应该更具体地描述这一点。也许maven中继承和聚合之间的区别。感谢 davidxxx 提供这个答案。 (2认同)