我已經搜索了這樣一個問題,但沒有找到任何東西,所以我在這裏。Maven多模塊:聚合公共依賴在一個單一的?
我有一個多模塊maven項目。多個模塊都會繼承相同的父級,其中定義了常見的依賴關係。其中,有一個我自己的模塊,一個「普通」模塊,其中實現了一些常用功能。
我的問題是:什麼是一個更好的習慣常見的依賴關係:定義它們全部明確地在父母,就像我目前做的?或者將它們定義在其他模塊引用的「通用」模塊中,然後依賴傳遞性(就像通用依賴關係的單入口點一樣)?
我已經搜索了這樣一個問題,但沒有找到任何東西,所以我在這裏。Maven多模塊:聚合公共依賴在一個單一的?
我有一個多模塊maven項目。多個模塊都會繼承相同的父級,其中定義了常見的依賴關係。其中,有一個我自己的模塊,一個「普通」模塊,其中實現了一些常用功能。
我的問題是:什麼是一個更好的習慣常見的依賴關係:定義它們全部明確地在父母,就像我目前做的?或者將它們定義在其他模塊引用的「通用」模塊中,然後依賴傳遞性(就像通用依賴關係的單入口點一樣)?
最好在父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>
然後你可以從引用您共同子模塊其他子模塊是你已經。
請注意,依賴管理是病毒,但。即如果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
是的,我知道dependencyManagement標記,但我更多地將它看作是在項目中強制執行依賴項版本的一種方式,而不會出現容易出錯的冗餘。但是,您仍然需要在每個模塊中聲明它們自己的依賴關係。 我在想**所有**(或幾乎)模塊共享一些依賴關係的情況:無論版本控制,是在父級定義那些_global_依賴關係(如我目前所做的)還是創建一個更好的做法爲了這個特定的目的,所有其他的依賴於這個模塊? – Eleaar 2011-07-30 10:39:56
我如上所述使用dependencyManagagement,並將每個模塊的依賴關係放在模塊級別的POM中,除非依賴關係始終爲100%的模塊...然後我將它放在父POM中。不要在每個子POM中不需要的父POM中添加一個依賴項,並且絕對不要創建一個項目來引入依賴項。在子模塊之間重複這些依賴關係並不重要,因爲您不需要提供版本作爲父級中的dependencyManagement節來爲您執行。 – HDave 2011-09-20 19:49:10