当前位置: 首页 > 知识库问答 >
问题:

Maven:多个父POM?

司徒良哲
2023-03-14
/pom.xml             (root/'grandparent' POM)
/parent-foo/pom.xml  (a parent with 'foo' dependencies & configurations) 
/child-1/pom.xml     
...
/child-n/pom.xml   
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

我是否可以在每次修改子-nPOM时实现以下反应器构建?或者,类似的东西?或者,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] ------------------------------------------------------------

理想情况下,我希望在一个反应器构建中实现所有功能,每个子-n编译并与每个父-*继承的依赖项一起使用。我知道这会使我的Maven repo处于不希望的状态,但至少我可以将反应器构建插入到我的CI,并确保我的构建在父级-*依赖平台上运行。

# 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
  • 注意到rootPOM本质上是POM的“祖父母”,per@ohadr的评论。
  • 指出,'foo'和'bar'都不仅仅是依赖继承提供程序;它们还提供构建配置--如果它们只提供依赖项,那么基于Maven概要的解决方案就足够了。

共有1个答案

凌朗
2023-03-14

Maven不支持多重继承,它通过使用依赖项管理小节中的“导入”范围间接支持这个概念

<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> 

在管理部分中,唯一的不便是您必须显式地声明依赖项,但是······你所取得的成就是:

拥有不同的POM--每个POM管理一组相关的依赖项。项目只需要导入这些POM,然后使用依赖项,而不必担心依赖项版本。本质上,这使父POM保持简单和精干。

 类似资料:
  • 问题内容: 我们有Java和Flex项目。当前,我们有1个基本pom,其中包含我们要用于两个项目的配置。问题是:Flex项目会继承配置,例如for 和plugins,这是不希望的。 我要清理它并有一个真正的基本pom,然后是a 和a 。但是,这在具有Flex部分和Java部分的多模块中如何工作? 我们有自己的应用程序插件,其中使用以下结构: 我的插件 我的插件客户端(flex) 我的插件服务器(j

  • 问题内容: 我有一个相当简单的行家化Java项目,但是在解决这个问题时遇到了麻烦。 我的父模块定义了许多Java类(和依赖项),我希望它们对几个子模块很有用。子模块之一专用于部署Web应用程序,因此它需要一些额外的类(Servlet)以及父模块中的所有内容。 文件结构如下所示 我的父母pom看起来像这样: 孩子看起来像这样: 这是我需要让孩子知道父级中定义的类和依赖项的全部吗?它似乎不是:ecli

  • 我们有一个模块化项目,包含大约10个工件: 此外,一些工件之间存在依赖关系: 我们当前的设置如下所示: parent是包含父POM的工件 这个父POM定义了所有必要的依赖项(比如Spring、JPA等等)进来 我们所有的工件也都在中定义 我们的工件将父工件称为明显的父工件 只有父POM定义版本。其他所有的POM都没有 我们使用三个数字的版本控制方案: 例如: 问题是: 一旦我们更改了工件的版本(例

  • 我在为父-子pom文件设置java编译器版本时遇到了问题。我在版本1.7的子pom中添加了maven-compiler-plugin,并注意到java版本的子模块从默认的1.5变成了1.7,而父项目仍然是1.5。然后,我将编译器插件从子pom移到父pom。预计对于父maven模块和子maven模块,编译器版本将更改为1.7。但奇怪的是,没有观察到任何变化,子模块仍然是1.7,父项目是1.5。我从e

  • 我有3个maven项目。项目1,项目2 为此,我在项目2 pom.xml文件中添加了这个 我的pom。Project3的xml是- 在项目3中,我添加了testng。xml文件来运行测试。现在如果我运行这个测试。xml文件,那么我所有的测试用例都成功运行了。如果我尝试使用maven测试运行测试用例,那么它会失败。 我已经在下面的pom文件中包含了testng.xml文件,以便使用maven运行te

  • 我有许多子POM(50个项目),要求我更新每个版本上的所有POM,例如,当从移动到时。 如何在一个地方定义版本,并在所有POM中重用它? 编辑-关于请求的一些动机:我希望在切换版本时尽可能少的占用。作为要更改的小文件。因为几乎没有人promise推动。等。 编辑-在加载父属性之前不能使用父属性。