Maven:multi-module parent 项目的 child 模块可以在另一个完全独立的项目中使用吗?

Maven: can a child module of a multi-module parent project be used in another completely separate project?

编辑:我已经改变了这个问题,所以它不仅仅是 Can maven projects have multiple parents? 的重复(答案似乎断言模块不能有 2 parents)


问:Maven: multi-module parent 项目的 child 模块可以在另一个完全独立的项目中使用吗?

考虑一个 ChildCommon 项目,它是一个 API 模块或由许多项目共享的公共实现库。

至少有两种可能:

案例 1:如果允许 2 parents(使用 Maven 3.3.3):

ParentA
|--ChildCommon

ParentB
|--ChildCommon

Case2: 而不是2parents,一个完全独立的项目直接依赖于child模块:

ParentA
|--ChildCommon

ProjectB dependsOn ChildCommon [EDIT: ANSWER IS, YES, THIS WAY WORKS]

如果是这样,如果 ChildCommon 模块的 Maven 构建规范的一部分已被抽取(向上)到 ParentA,如何确保在 ParentB 或 ProjectB 使用时使用正确的 Maven 规范(没有必须重复 ParentA 蛮力的事情)?

[编辑:答案是 Maven 通过 "externally" 引用的 child 的 parent POM 完美地处理了这个问题。]


编辑:扩展:我的目标是使用 parent POM 制作我的 POM Optimizing and Refactoring 蛋糕并食用。我有一组 6 个核心模块,它们协同工作以很好地实现模块化,我需要开发一个核心 Web 应用程序系统:

CoreLib, CoreAll, CoreImp, CoreAPI, CoreEJB, CoreWeb

CoreWeb 作为一个独立的网络应用程序运行,也可以被其他使用覆盖的网络应用程序重复使用。

我不会在这里讨论为什么我需要 6,但它实际上对我的情况来说很优雅。然而,有时不得不清理和建造每一个是令人厌烦的。它还 error-prone 在每个 pom.xml 中重复某些工件版本(我的主要关注点)。

一个特定的网络应用程序组合利用(至少部分)上述核心模块(包括 CoreWeb):

SpecAPI, SpecEJB, SpecWeb

但是另一个应用程序(一个 non-web 应用程序)可能只利用核心应用程序的一个子集,例如 CoreAll、CoreImp,并且在任何情况下都不想耦合到例如 CoreWeb。

如果您有 child project/module ChildCommon 和 parent POM 项目:

ParentA
|--ChildCommon

您可以引用 ChildCommon 以在另一个项目 ProjectB 中重用它而不会产生不良影响 side-effects,例如级联到 ParentA 的所有其他 children。