Maven:如何不依赖 Parent POM
Maven: how to not depend on Parent POM
我有一个 Maven multi-module 项目。像这样:
- ParentProject
- ChildA
- ChildB
- ChildC
child 项目继承自 Parent POM (ParentProject
) 仅仅是为了共享 <build>
、<scm>
和 <properties>
,以免在所有 child 模块中重复。因此,parent-child 关系的 objective 与依赖关系没有任何关系。它在 build-time 发挥作用,而不是在运行时,可以这么说。
child 项目的工件供更广泛的受众使用,因此它们将发布到集中式存储库中。
如何从 child 消费者的角度“打破”从 child 到 parent 之间的关系?
假设另一个项目 ProjectX
添加了对 ChildA
的依赖。执行此操作时,Maven 客户端不仅会尝试下载 ChildA
本身的 POM 和工件,甚至还会尝试下载 ParentProject
的 POM。但是,从消费者的角度来看,绝对不需要那个 POM。它不包含消费者需要知道的信息。
如何从消费者的角度打破这种关系?强制将 ParentProject
的 POM 发布到存储库中似乎毫无意义,因为那里没有人需要它。
也许 Maven 可以通过另一种方式让我在项目之间共享构建指令和属性等内容,而无需强制 Parent POM 存在于集中式存储库中?
或者也许我可以通过某种方式来操纵 Child 项目的 POM,这些项目被放入集中式存储库(删除 <parent>
元素,因为它是不相关的)。
也许只有我,但我觉得 Maven 在这里混淆了两个不相关的概念(build-time 与 consume-time)并在 repo 中强制进行不必要的往返和不必要的工件。我还没有涉足 Gradle,但我想知道它是否做得更好?
通常,Maven POM 既是构建 POM,也是消费者 POM。这并不理想,并且可能会在 Maven 的未来版本中改变。
目前,您最好的选择似乎是 flatten Maven 插件,它允许您在上传之前删除 POM 的“不必要”部分。
我有一个 Maven multi-module 项目。像这样:
- ParentProject
- ChildA
- ChildB
- ChildC
child 项目继承自 Parent POM (ParentProject
) 仅仅是为了共享 <build>
、<scm>
和 <properties>
,以免在所有 child 模块中重复。因此,parent-child 关系的 objective 与依赖关系没有任何关系。它在 build-time 发挥作用,而不是在运行时,可以这么说。
child 项目的工件供更广泛的受众使用,因此它们将发布到集中式存储库中。
如何从 child 消费者的角度“打破”从 child 到 parent 之间的关系?
假设另一个项目 ProjectX
添加了对 ChildA
的依赖。执行此操作时,Maven 客户端不仅会尝试下载 ChildA
本身的 POM 和工件,甚至还会尝试下载 ParentProject
的 POM。但是,从消费者的角度来看,绝对不需要那个 POM。它不包含消费者需要知道的信息。
如何从消费者的角度打破这种关系?强制将 ParentProject
的 POM 发布到存储库中似乎毫无意义,因为那里没有人需要它。
也许 Maven 可以通过另一种方式让我在项目之间共享构建指令和属性等内容,而无需强制 Parent POM 存在于集中式存储库中?
或者也许我可以通过某种方式来操纵 Child 项目的 POM,这些项目被放入集中式存储库(删除 <parent>
元素,因为它是不相关的)。
也许只有我,但我觉得 Maven 在这里混淆了两个不相关的概念(build-time 与 consume-time)并在 repo 中强制进行不必要的往返和不必要的工件。我还没有涉足 Gradle,但我想知道它是否做得更好?
通常,Maven POM 既是构建 POM,也是消费者 POM。这并不理想,并且可能会在 Maven 的未来版本中改变。
目前,您最好的选择似乎是 flatten Maven 插件,它允许您在上传之前删除 POM 的“不必要”部分。