2011-09-21 117 views
6

我是Maven的新手,我试图理解为什么我公司的模块被组织到'模块组'中,而且每个子模块都明确声明了其父模块。我不太明白POM参考文献试图说的关于difference between inheritance and aggregationApache Maven:继承,聚合和依赖之间有什么区别?

例如,父模块:

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

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

回答

9

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

当你在第二个例子中使用继承,你可以使用定义从定义一次父POM,(像软件版本要使用的)

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

+0

那么,为什么我不想指定'util_core'作为'util_client'的子模块呢? 'util_client'仍然会编译? –

+0

只有安装'util_core'后才能编译'mvn install'如果从顶层执行它,它将按顺序编译它们。 –

相关问题