Maven POM依赖关系管理与子模块

时间:2012-07-20 11:23:08

标签: maven inheritance dependencies pom.xml

我有两个pom文件:

1)父pom.xml

...

<modules>
    <module>web-module</module>
    <module>interface-module</module>
</modules>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>${project.groupId}.${project.artifactId}</groupId>
            <artifactId>interface-module</artifactId>
            <version>${project.version}</version>
            <type>ejb</type>
            <scope>provided</scope>
        </dependency>
    </dependencies>
 </dependencyManagement>

2)Child pom.xml

<dependencies>
    <dependency>
        <groupId>${project.parent.groupId}.${project.parent.artifactId}</groupId>
        <artifactId>interface-module</artifactId>
        <version>${project.version}</version>
        <type>ejb</type>
    </dependency>
</dependencies>

问题是:

为什么它无法解决由父依赖项管理的依赖项,并且在Child中省略了版本?为什么我必须为从子集继承的子模块使用dependencyManagment指定版本,而子模块正在聚合这些模块? 也许有些建议?

UPD: 原来,当Child的groupId被更改并且不是从Parent继承的那个时,这种行为存在... 基本上我有2个父模块的子模块,它们都是父模块的子模块。 当我在Child模块中更改groupId时,它会要求我在依赖关系管理期间指定版本,这有点奇怪。 任何想法为什么maven都是这样的?

1 个答案:

答案 0 :(得分:2)

父项不会传递给子模块,这意味着您还必须在子模块中声明父项。

另外,请注意您在一个模块中执行两项操作:

  • 子模块的聚合和
  • 作为指定此作为父
  • 的模块的父级

这通常没问题,但是如果您的设置稍微复杂一点,您可能会遇到循环依赖或类似问题。只要你知道这个问题,你应该没问题。

以下是一些more details