Apache Maven:继承,聚合和依赖关系有什么区别?

时间:2011-09-21 15:21:14

标签: java maven-2

我是Maven的新手,我正在努力理解为什么我公司的模块被组织成'模块组',但每个子模块也明确声明其父模块。我不太明白POM参考试图对difference between inheritance and aggregation

的评论

例如,父模块:

<groupId>example.group</groupId>
<artifactId>util</artifactId>
<packaging>pom</packaging>
<name>Util Parent</name>

<modules>
    <module>util_client</module>
    <module>util_core</module>
    <module>util_server</module>
</modules>

其中一个孩子:

<parent>
    <artifactId>util</artifactId>
    <groupId>example.group</groupId>
    <version>trunk-SNAPSHOT</version>
</parent>

<groupId>example.group.util</groupId>
<artifactId>util_core</artifactId>
<packaging>jar</packaging>
<name>Util Core</name>

为什么要两种方式宣布?这是多余的吗?为了使事情更加混乱,一些util子模块依赖于彼此:

<groupId>example.group.util</groupId>
<artifactId>util_client</artifactId>
<packaging>jar</packaging>
<name>Util Client</name>

<dependencies>
    <dependency>
        <groupId>example.group.util</groupId>
        <artifactId>util_core</artifactId>
    </dependency>
</dependencies>

很抱歉,如果这是一个问题,但哇这令人困惑!谢谢你的帮助。

1 个答案:

答案 0 :(得分:9)

定义子模块时,您可以从顶层一次构建和释放它们。

在第二个示例中使用继承时,可以使用一次定义的父POM中的定义(与要使用的软件版本一样)

在上一个示例中,当一个模块需要来自另一个模块的资源时,您可以将其添加为依赖项,它将自动下载并将其包含在构建路径中。