2013-03-21 43 views
29

我有一些多年的Maven項目經驗,即使是多模塊項目(這也讓我討厭 maven的多模塊功能(所以現在完成了免責聲明)),甚至如果我真的很喜歡Maven的有件事我不能得到關於一個明確的答案:Maven Multi模塊的優勢在於簡單的依賴性

什麼是多模塊Maven項目的一個典型的用例?這種結構與簡單的依賴關係和父pom相比的附加價值是多少?

我已經看到了很多多模塊項目的配置,但所有這些都可以通過創建一個簡單的依賴庫作爲可交付成果(即使是作爲單獨的可交付成果) :分解依賴和配置),我還沒有找到任何用例,我可以清楚地看到多模塊結構的附加價值。

我一直髮現這種結構帶來了過度複雜而沒有真正的好處:我在哪裏錯過了什麼? (說實話,我可以得到一些ear可以受益於這種結構,但除了那個特定的用例,任何其他真正的用途和好處?)

回答

23

這是一個真實的案例。

我有一個多模塊項目(和你的咆哮......我沒有看到任何複雜的東西。)最終的結果是一個web應用程序,但我有不同的模塊爲api,impl和webapp。

創建項目12個月後,我發現我必須使用從jar中運行的獨立進程與Amazon S3集成。我添加了一個依賴於api/impl的新模塊,並將我的代碼寫入新模塊中進行集成。我使用程序集插件(或類似的東西)來創建一個可運行的jar,現在我可以在tomcat中部署一個war,並且我可以在另一個服務器上部署一個進程。我的S3集成過程中沒有Web類,我的webapp中沒有Amazon依賴關係,但我可以在api和impl中共享所有的東西。

3個月後,我們決定創建一個REST web應用程序。我們希望將其作爲一個單獨的應用程序來執行,而不僅僅是在現有的webapp中添加新的URL映射。簡單。另一個模塊,另一個webapp作爲maven構建的結果創建,沒有特別的修補。業務邏輯可以在webapp和rest-webapp之間輕鬆共享,我可以根據需要部署它們。

+0

這聽起來對我來說最好的用例描述到目前爲止,而且您對其他答案的評論也證實了我的想法/感受:多模塊爲Multipackaging或大型項目提供了價值。 – benzonico 2013-03-23 16:42:05

+0

我絕不是maven的fanboi,但有些情況下,它「剛剛工作」,這似乎是我的優勢之一。很高興答案幫助。 – digitaljoel 2013-03-23 17:06:08

+0

我實際上正在密謀使用這個答案來演示多模塊應該在哪些情況下不應該被使用。 – benzonico 2013-03-23 20:04:11

1

我認爲你是正確的,大多數項目,使用多模塊,實際上並不需要它們。

在我工作的地方,我們使用多模塊項目(我認爲這是一個很好的理由)。我們也有類似的面向服務架構的東西,所以每一個應用程序

  • 客戶端模塊
  • 的接口模塊(已共享客戶端與執行之間的物體)
  • 實現模塊
  • 戰爭模塊

我同意將該實現和戰爭模塊放在同一個實際模塊中可以,但是(可以說)的好處是,這是非常明確的劃分解決問題的類以及應用程序如何與外部世界通信。

在以前只涉及Web應用程序的項目中,我試圖將所有內容放在同一個模塊中,因爲考慮到我使用的模塊,它使測試變得更加容易。

10

多模塊的主要好處是

  • 一個單一的maven命令馬上就構建所有的模塊。
  • 最重要的是:maven負責構建您的訂單。
  • 配置您的CI服務器也非常簡單:一個jenkins工作來構建一切。

我已經在一個約30個子模塊的項目中工作過。有時候,你需要改變一些東西而不是模塊,並且運行一個單一的命令並確保需要編譯的所有東西都按照正確的順序編譯是必須的。

編輯

爲什麼30個子模塊?

巨大的框架,很多的功能,很多的開發人員,模塊基礎上的功能分離。這是一個真實的用例,將代碼分離成模塊是非常有意義的。

+0

構建順序對我來說似乎是一個有效的參數,但是,您能否描述爲什麼您需要30(!)子模塊? – benzonico 2013-03-21 22:15:46

+0

我曾經在一個情況下工作過,我們有12-15個團隊在一個項目上工作。我們有一個主要的項目,有大約30個模塊。它允許每個團隊擁有他們所在的領域(2-4個模塊),並在團隊中明確分工。這並不是完美的,但它並沒有像50個開發人員一直在同一個軟件包中那樣糟糕(我在另一個時間也遇到過) – digitaljoel 2013-03-21 22:45:32

+0

比接受的答案更好 – 2016-11-11 11:47:37