2012-07-20 82 views
1

我有這兩個文件POM:與子模塊的Maven 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)兒童的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> 

問題是:

爲什麼它無法解決由parent dependencyManagment管理的依賴關係,在Child中省略了版本?爲什麼我必須指定版本,而將dependencyManagment用於從正在聚合這些模塊的Parent繼承的子模塊? 也許一些建議?

UPD: 原來,當兒童的groupId改變存在此行爲,而不是被繼承自父一... 基本上我有2子模塊的家長之一,他們都是兒童父母之一。 當我更改Child模塊中的groupId時,它會要求我在依賴管理期間指定版本,這有點奇怪。 任何想法,爲什麼maven是這樣的?

回答

2

父項不會傳遞給子模塊,這意味着您必須在子模塊中聲明父項。

此外,需要注意的是在一個模塊中做兩件事情:

  • 子模塊的聚集和
  • 充當模塊父母指定這一個父

這是通常可以,但是在某些時候,如果您的設置稍微複雜一些,您可能會遇到循環依賴或類似問題。只要你知道問題,你應該沒問題。

這裏有一些more details