我需要在POM.xml中有一个Parent声明吗?

时间:2013-03-05 14:54:24

标签: maven

我已将我的项目声明为pom.xml以定义父项,并触发所有包含模块的反应器构建。一切都很好,并按预期工作。它以正确的顺序构建,所有测试都正确运行,并且我获得了预期的输出。

其中一个项目是共享库。我不想在这里添加<parent>声明,所以我没有。一切都还行。

我的问题:我是否需要在任何子项目中添加父项目声明?项目之间建立双向关系的利弊是什么?如果我没有添加声明,那么当某些东西停止工作时,我是否会更加努力?

重新提到一个问题:为什么要在模块pom.xml文件中使用<parent>配置?

2 个答案:

答案 0 :(得分:9)

您的问题与项目继承与项目聚合之间的区别有关。 <parent>引用定义了继承关系。父pom.xml中的<modules>部分定义聚合。它们是不同的。

如果模块pom.xml中没有<parent>配置,它将不会继承父pom.xml配置。因此,假设您在<dependencyManagement>部分中定义父pom中的依赖项版本,没有父引用的模块pom.xml将不会继承该版本。或者,如果所有子模块都需要使用公共库,则可以在父pom.xml中定义依赖项。但是,没有父引用的模块pom.xml也不会继承该依赖项。

有关详细信息,请查看Project Inheritance vs Project Aggregation

答案 1 :(得分:0)

这取决于您如何配置构建。如果您有正确配置的父pom,则可以在项目之间共享version and groupid等基本信息。

您可以定义应在项目中的所有模块中共享的项目范围配置信息。例如:

<modelVersion>4.0.0</modelVersion>
<groupId>groupd.id</groupId>
<artifactId>artifact.id</artifactId>
<packaging>pom</packaging>
<version>version</version>

有了这些,您在模块项目中没有重复的信息。可以像这样引用相同的信息:

<parent>
    <groupId>group.id</groupId>
    <artifactId>artifact.id</artifactId>
    <version>version</version>
</parent>

请记住,父pom可用于共享比上面指定的更多信息。您可以进行依赖关系管理,插件管理甚至可以定义可重用的配置文件。