当您添加<parent>对 Maven 项目的引用时,您正在做的是:“从该父项获取所有配置并将其注入我的模型,然后用以下内容覆盖”
因此,为了让 Maven 构建您的项目的模型,Maven 必须自己检索父级。换句话说,添加<parent>标签会在父子节点之间创建一个明确的硬依赖关系。
好消息是Inheritance 不必遵循 Aggregation。这到底是什么意思?
聚合是当你<modules>在你的 pom.xml 中列出的时候。它告诉 Maven 反应器(即 Maven 构建的项目集)还应该包括以下(子)项目。
继承是当您设置项目的<parent>.
Maven 没有强制要求项目<parent>必须将其子项列为<modules>,而且 Maven 也没有强制要求项目<modules>必须将项目列为<parent>.
有些人会这样设置他们的项目
ROOT/
+- pom.xml
+- parent/
| \- pom.xml
+- api/
| \- pom.xml
\- packaging/
\- pom.xml
其中 , 的父级ROOT实际上api是packaging的子级ROOT。或者有时ROOT会是一个没有父级的独立项目[事实上这是我自己经常使用的模式。当我在处理几个相关项目时,我会在我的本地磁盘上汇总pom.xml并用我的 IDE 打开它,这样所有相关代码都可以作为一个“项目”使用,即使实际模块可能来自不同的来源]
因此,在您的情况下,解决方案是从“API”模块中删除<parent>标签。
现在!有一个缺点。当您<parent>从“API”模块中删除标签时,您已经删除了父项目提供的所有默认值,因此您需要复制与“API”项目相关的那些默认值,否则您可能会发现行为的细微变化. 例如,您应该明确复制插件版本的固定以及<dependencyManagement>与“API”依赖项相关的任何内容。您可能需要复制其他位,但您应该mvn help:effective-pom在删除<parent>标记之前和之后使用 Maven 命令,以帮助查看有效差异