2017-04-04 52 views
0

我有一個多模塊Maven項目,具有如下的結構:Maven的 - 依靠多模塊聚合項目

projectA-parent 
    - module-1 
    - module-2 

而且我還有一個項目,我想在所有的模塊,使projectA-parent作爲運行時依賴項(這是一個Spring應用程序,並且projectA-parent中的每個模塊都包含我希望能夠自動裝配的Spring服務)。

我想什麼做的是一樣的東西

<dependency> 
    <groupId>projectA-group</groupId> 
    <artifactId>projectA-parent</artifactId> 
    <scope>runtime</scope> 
</dependency> 

所以,如果我添加其他模塊projectA-parent它會自動帶來了作爲一個運行時的依賴(即,我不希望有添加每個新模塊作爲我的Spring應用程序中的依賴項)。這樣的事情可能嗎?

回答

1

你將不得不使用

<dependencies> 
    <dependency> 
    <groupId>projectA-parent-groupId</groupId> 
    <artifactId>projectA-parent-artifactId</artifactId> 
    <type>pom</type> 
    </dependency> 
</dependencies> 

這將傳遞地在com.my:commons-deps聲明的所有依賴關係添加到您當前的POM。

使用

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>...</groupId> 
      <artifactId>...</artifactId> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

作品作爲一個簡單的「包括」在你的依賴管理工件版本。因此,它不會在您的項目中添加任何依賴項。

UPDATE:

另一個aprroach是使用一個BOM(物料清單)。檢查link的使用BOM。它隱藏在底部的某處。

您可以創建一個BOM列出了所有的模塊,依賴關係,然後你可以包括BOM到您的pom.xml這樣的:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>your_bom_group_id</groupId> 
      <artifactId>your_bom_artifact_id</artifactId> 
      <version>you_bom_version</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
+0

問題是模塊不是'projectA-parent'的依賴關係,而是子模塊。我當前的解決方案(可能是最好的/唯一的選擇)是有一個「BOM」模塊,將所有其他模塊列爲依賴項,然後將此BOM作爲類型導入:pom/scope:import dependency,如同在答案中一樣。依賴關係在BOM pom.xml中標記爲範圍:運行時。 – bobsyouruncle

1

我想我只想補充一點,提及到另一個模塊在項目中的其它模塊,如:

projectA-parent 
    - module-1 
    - module-2 
    - module-deps 

module-deps作爲依賴於module-1module-2一個罐子或POM。 當您添加更多模塊時,您必須更新module-deps,但至少它只能在一個地方。