【发布时间】:2020-01-21 13:33:54
【问题描述】:
在maven多模块项目中,有一个子模块需要从外部父项目继承。因此它不能像其他子模块一样从父模块继承,并且那些不能继承该外部父模块(因此使外部项目成为整个层次结构的父模块不是一种选择)。
有没有办法消除此类模块与层次结构的其余部分之间的属性重复?
parentpom.xml
<properties>
<foo>bar</foo>
</properties>
<modules>
<module>child</module>
<module>stepchild</module>
</modules>
childpom.xml
<parent>
<groupId>my</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<description>foo can be used: ${foo}</description>
stepchildpom.xml
<parent>
<groupId>external</groupId>
<artifactId>parent</artifactId>
<version>35</version>
<relativePath/>
</parent>
<description>foo does not get substituted: ${foo}</description>
【问题讨论】:
-
基于给定的继子,您混合了多模块构建和聚合器构建,因为您的继子没有正确使用它的父级,这通常是一个坏主意。问题出现了:你为什么需要不同父母的财产?听起来你父母有设计缺陷......
-
附带说明:您的父 pom 和子 pom 之间存在循环依赖关系。这会创建一个整体,并可能导致几个问题,尤其是在针对现代开发技术(CI 等)时。我建议您将聚合与父级分开。
-
@khmarbaise,您要指出的区别 - 所有子模块都属于层次结构或没有 - 它是否记录在某处?究竟违反它的后果是什么?这个实现肯定是有缺陷的(因为它不起作用),但是有没有更好的(允许在不继承整个构建配置的情况下共享属性)?
-
@Amadán,我不确定我明白你的意思是什么循环依赖。另外,你指的是什么问题?
-
@OliverGondža 我假设孩子导入你的父母 pom。随着父导入子模块作为子模块,您将有一个循环依赖。这意味着没有办法分离那些让你最终得到一个大单体的模块。您可能会发现很难让 CI 服务器独立构建子模块,从而导致对单个子模块的更改超过必要的构建(+反馈)时间。此外,如果对一个子模块的更改破坏了您的构建,您最终也会停止对所有其他子模块的开发,因为损坏的子模块会阻止您构建整体。
标签: java maven dry maven-module