当您添加<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 命令,以帮助查看有效差异