2011-10-21 25 views
10

我們有一個被設置爲這樣一個maven模塊:Maven的 - 包括聚甲醛作爲依賴的所有子模塊中的另一個模塊

a (parent) 
    -> b (submodule) 
    -> c (submodule) 
    -> d (submodule) 

子模塊列表也將增長隨着時間的推移(到名單20左右)。我們有另一個模塊,它將作爲依賴包含a的所有子模塊。有沒有這樣做的好方法,而不必手動讓子模塊列表與依賴列表保持同步。即有什麼辦法可以將一個和所有的子模塊作爲一個依賴項嗎?

回答

0

「自動」包含的依賴關係的唯一途徑是通過傳遞依賴關係機制,它只能通過拉入依賴關係來工作,除非你有一個依賴於所有子模塊的pom,否則你不會得到他們沒有列出他們全部。需要做到這一點意味着您的項目設計存在缺陷。如果這些模塊是「全部或全部」,那麼它們可能不是單獨的模塊。

3

你這裏有幾個選擇:

  1. 沒有變化。列出每個pom中的所有依賴關係。但是,如果它們具有公共父級,則可以在父級pom中使用dependencyManagement來爲不同的依賴性設置版本。在孩子poms中,你不需要列出版本。見this section from Maven By Example。這種方法的缺點是你必須反覆重複列出相同的依賴關係。
  2. 創建一個列出所有共享依賴關係的父pom。看一個例子here。這裏的一個缺點是你限制所有想要利用這個的項目來使用父項目,因爲他們可能需要使用另一個父項目。
  3. 等待Maven mixins,最後聽說的是still not ready
  4. 重新思考你的設計。項目依賴於如此多的不同模塊和接口是否合理?要減少coupling,您可能需要創建這些新項目可以使用的一個界面。幾個開源多模塊項目(如Apache Axis2)遵循這種模式。一個模塊包含您的20個依賴關係,並顯示新模塊可以調用的接口。新模塊可以只將一個主模塊列爲依賴項,並且所有20個依賴項都作爲傳遞依賴項被引入。

我認爲選擇#4可能是對的,但我對你的情況不夠熟悉。

+0

我也有類似的問題。方法#4似乎是一個不錯的選擇。如果有/你可以指點我的方法#4的任何例子,這將是有益的嗎? –

1

除了設計考慮之外,這很容易完成 - 只需在指向父pom的依賴項中包含<type>pom</type>。例如:

<dependency> 
    <groupId>my.group.id</groupId> 
    <artifactId>a</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <type>pom</type> 
</dependency> 
相關問題