我有一个具有以下POM结构的多模块foo
项目:
/pom.xml (root/'grandparent' POM)
/parent-foo/pom.xml (a parent with 'foo' dependencies & configurations)
/child-1/pom.xml
...
/child-n/pom.xml
此标准父子关系parent-foo
继承自root
,child-n
继承自parent-foo
。
root -> parent-foo -> child-n
这一切都很好&很好,并且适用于这个琐碎的案例。
使用parent-foo
适用于基于foo
的旧版用例,但也会测试我们正在迁移的未来用例:bar
。
/pom.xml (root POM)
/parent-bar/pom.xml (a parent with 'bar' dependencies & configurations)
/child-1/pom.xml
...
/child-n/pom.xml
root -> parent-bar -> child-n
我是否可以实现以下反应器构建,而每次都必须执行变通方法来修改child-n
POM?或者,类似的东西?或者,Maven只是这个用例的错误工具吗?
[INFO] ------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] root ............................................... SUCCESS
[INFO] parent-foo ......................................... SUCCESS
[INFO] child-1 ............................................ SUCCESS (foo parent)
[INFO] ...
[INFO] child-n ............................................ SUCCESS (foo parent)
[INFO] parent-bar ......................................... SUCCESS
[INFO] child-1 ............................................ SUCCESS (bar parent)
[INFO] ...
[INFO] child-n ............................................ SUCCESS (bar parent)
[INFO] ------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------
理想情况下,我希望在一个反应堆构建中完成所有这些工作,每个child-n
已编译完成。与每个parent-*
的继承依赖项一起使用。我知道这会让我的Maven repo处于不受欢迎的状态,但至少我可以将reactor构建插入我的CI并确保我的构建在两个parent-*
依赖平台上运行。
目前的解决方法是修改所有child-n
POM'父母,这样:
# 1. modify all child-n POMs
# Old:
root -> parent-foo -> child-n
# New:
root -> parent-bar -> child-n
2. Run reactor build effective with 'root -> parent-bar -> child-n' dependency tree
root
POM基本上是"祖父母" POM,根据@ OhadR的评论。答案 0 :(得分:5)
简短回答Maven不支持多重继承,它通过使用" import"间接支持这个概念。依赖关系管理部分中的范围
<dependencyManagement>
<dependencies>
<dependency>
<groupId>other.pom.group.id</groupId>
<artifactId>other-pom-artifact-id</artifactId>
<version>SNAPSHOT</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
在管理部分中,唯一的不便是您必须明确声明依赖关系,但......您所取得的成就是:
拥有不同的poms - 每个poms管理一组相关的依赖项。项目只需要导入这些poms然后使用依赖项而不用担心依赖项版本。基本上这可以保持父母的简单和精益。
答案 1 :(得分:1)
child-n项目之间的依赖关系如何?只在每个父母内部*或与父母一起 - *?
如果我在哪里,我会创建这样的东西:
/pom.xml (Parent POM for all projects)
/project-foo/pom.xml (BOM for Project Foo. only dependencyManagement for foo-* artefacts)
/project-foo/parent/pom.xml (Parent POM for Project Foo. dependencyManagement for external used artifacts. ev.including import of bar BOM)
/project-foo/parent/foo-child1/pom.xml (Child Artifact fron Project Foo)
/project-foo/parent/foo-child2/pom.xml (Child Artifact fron Project Foo)
/project-foo/parent/foo-child3/pom.xml (Child Artifact fron Project Foo)
/project-bar/pom.xml (BOM for Project Bar. only dependencyManagement for bar-* artefacts. ev.including import of foo BOM)
/project-bar/parent/pom.xml (Parent POM for Project Bar)
/project-bar/parent/bar-child1/pom.xml (Child Artifact fron Project Bar)
/project-bar/parent/bar-child2/pom.xml (Child Artifact fron Project Bar)
/project-bar/parent/bar-child2/pom.xml (Child Artifact fron Project Bar)
我认为每个项目(Foo / Bar)都有一个连续的整合/构建工作。然后你可以将它指向你的/ project - * / pom.xml
官方maven页面链接:http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management
我希望我完全理解你的问题...