【发布时间】:2021-02-11 17:21:20
【问题描述】:
我有一个 Maven 多模块项目。像这样的:
- ParentProject
- ChildA
- ChildB
- ChildC
子项目继承自父 POM (ParentProject) 仅仅是为了共享 <build>、<scm> 和 <properties> 等内容,以免在所有子模块中重复。因此,父子关系的目标与依赖关系没有任何关系。可以说,它在构建时起作用,而不是在运行时起作用。
子项目的工件供更广泛的受众使用,因此它们将发布到集中式存储库中。
从孩子的消费者的角度来看,我如何“打破”从孩子到父母的关系?
假设另一个项目ProjectX 添加了对ChildA 的依赖项。执行此操作时,Maven 客户端不仅会尝试下载 ChildA 本身的 POM 和工件,甚至还会尝试下载 ParentProject 的 POM。但是,从消费者的角度来看,绝对不需要那种 POM。它不包含消费者需要知道的信息。
如何从消费者的角度打破这种关系?强制将 ParentProject 的 POM 发布到存储库中似乎没有意义,因为那里没有人需要它。
也许 Maven 可以通过另一种方式让我在项目之间共享诸如构建指令和属性之类的内容,而无需强制将 Parent POM 存在于集中式存储库中?
或者也许我可以通过某种方式来操纵子项目的 POM,这些项目被放入集中式存储库(删除 <parent> 元素,因为它无关紧要)。
也许只有我,但我觉得 Maven 在这里混淆了两个不相关的概念(构建时间与消耗时间),并在 repo 中强制执行不必要的往返和不必要的工件。我还没有涉足 Gradle,但我想知道它是否做得更好?
【问题讨论】: