Apache Maven:继承、聚合和依赖之间有什么区别?

6
我是一个新手使用Maven,我试图理解为什么我的公司的模块被组织成“模块组”,但每个子模块都明确声明其父级。我不太明白POM参考文档中继承和聚合之间的区别是什么意思。
例如,一个父模块:
<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个回答

9

当你定义子模块时,可以从顶层一次性构建和发布它们。

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

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


那么,为什么我不想将 util_core 指定为 util_client 的子模块呢?util_client 仍然可以编译吗? - Neil Traft
只有在安装了“util_core”(使用“mvn install”命令)之后,它才能编译。如果你从顶层开始编译,它会按顺序编译所有的内容。 - Peter Lawrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接