2011-05-22 68 views
8

我已經搜索了這樣一個問題,但沒有找到任何東西,所以我在這裏。Maven多模塊:聚合公共依賴在一個單一的?

我有一個多模塊maven項目。多個模塊都會繼承相同的父級,其中定義了常見的依賴關係。其中,有一個我自己的模塊,一個「普通」模塊,其中實現了一些常用功能。

我的問題是:什麼是一個更好的習慣常見的依賴關係:定義它們全部明確地在父母,就像我目前做的?或者將它們定義在其他模塊引用的「通用」模塊中,然後依賴傳遞性(就像通用依賴關係的單入口點一樣)?

回答

14

最好在父pom中使用dependencyManagement標記來定義您的依賴關係及其版本,然後在需要的地方在子模塊中引用這些依賴關係。當您的項目中需要其他子模塊時(例如,來自其他子模塊的公共子模塊),則依賴關係將以傳遞方式發現。例如:

在你的父POM:

<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.7</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

在您共同POM(公告不存在版本或範圍):

<dependencies> 
    <dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    </dependency> 
</dependencies> 

然後你可以從引用您共同子模塊其他子模塊是你已經。

+1

請注意,依賴管理是病毒,但。即如果A - > B,A - > C:1.0和B - > C:2.0通過依賴管理的方式,那麼在構建A時,您將得到C:2.0而不是C:1.0,正如您期望的那樣傳遞依賴性規則。爲了獲得你想要的版本,A必須使用依賴管理來強制它到C:1.0。因此:病毒。 – 2011-07-26 17:25:06

+1

是的,我知道dependencyManagement標記,但我更多地將它看作是在項目中強制執行依賴項版本的一種方式,而不會出現容易出錯的冗餘。但是,您仍然需要在每個模塊中聲明它們自己的依賴關係。 我在想**所有**(或幾乎)模塊共享一些依賴關係的情況:無論版本控制,是在父級定義那些_global_依賴關係(如我目前所做的)還是創建一個更好的做法爲了這個特定的目的,所有其他的依賴於這個模塊? – Eleaar 2011-07-30 10:39:56

+2

我如上所述使用dependencyManagagement,並將每個模塊的依賴關係放在模塊級別的POM中,除非依賴關係始終爲100%的模塊...然後我將它放在父POM中。不要在每個子POM中不需要的父POM中添加一個依賴項,並且絕對不要創建一個項目來引入依賴項。在子模塊之間重複這些依賴關係並不重要,因爲您不需要提供版本作爲父級中的dependencyManagement節來爲您執行。 – HDave 2011-09-20 19:49:10

0

我可以看到兩個合理的選擇:

  • 聲明公共依賴於一個共同的模塊
  • 使用import scope

第二個選項是有用的,當你有多個模塊依賴於同一個大疊的具有自己的依賴關係數量的組件。

相關問題