2012-12-31 117 views
1

簡而言之,我試圖做的是一次構建一堆庫和應用程序,所有Maven項目。從我所瞭解的一種方法來完成這個只是在一個命令行運行mvn package將創建一個multimodule項目,將列出我想要構建的每個模塊,將它們放在Maven反應堆中,然後構建。管理Maven多模塊構建,同時繼承父pom

以下Maven書中的示例似乎通常是一個多模塊pom位於各個模塊上方的目錄中。但是,通常情況下,父級pom位於模塊上方的目錄中,這引發了問題,通常情況下,多模塊構建也應該是父級?我想不是;不過我想知道爲什麼我會遇到這個有趣的設計怪癖。

所以,我想知道正確的方法來設置它。我看到下面的約定/要求:

  • 的多模塊pom必須具備的其他模塊生活在光盤,其中的知識。由於它實際上是從源代碼構建的,因此它不能簡單地依賴於已經安裝的版本(因爲它正在安裝它們!)
  • 雖然這可能會更可取,但父類實際上並不一定是物理目錄。我認爲這是最好的突破。
  • 真的,單個庫/應用程序甚至不需要知道它們是作爲多模塊構建的一部分構建的。

這是如何通常在多模塊構建中設置的?是否有一種更簡單的方法來同時管理多個Maven項目?

回答

1

我把所有單獨的模塊放在根模塊中。 Some software在多層次的層次結構中遇到問題。

爲了讓孩子模塊是指它的父在同一水平上:

<parent> 
    <groupId>com.domain</groupId> 
    <artifactId>xyz</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <relativePath>../xyz/pom.xml</relativePath> 
</parent> 

我建議你不要放任何東西在多模塊(例如性能)是單獨的模塊需要繼承。如果這樣做,您將無法獨立構建其他模塊。

+0

+1我發現eclipse有嵌套模塊的性能問題。 – asgoth

+0

如果解決模塊相互依賴性問題比多模塊構建錯誤有問題。 – khmarbaise

+0

'也意識到使用本地存儲庫(而不是目標目錄)來解決模塊間依賴關係。 - 從Maven 3開始並不是真實的。如果構建中的某個模塊對構建中的另一個模塊有依賴關係,則該模塊的構建目錄將用於滿足依賴性。我無法立即找到相關文檔,但在實踐中很容易證明。 –

0

我甚至可以說這是「公約」的模糊部分。文檔和常識都暗示項目聚合(又稱多模塊構建)和繼承是爲處理不同用例而提供的兩種不同機制。

同時,似乎有一個事實上的約定(是的,我知道)將項目聚合和繼承父角色合併爲一個單獨的pom。事實上,父聲明的元素和項目合併機制的模塊元素似乎都將這種用法引向了這種組合。

就我個人而言,我覺得它是非常有用的,以定期分離父pom。而且我也發現它非常有用,可以在我的源代碼管理中找到完全分離的位置,從而實現我的文件夾結構。但是,在源代碼管理/文件夾結構中查找作爲相同多模塊構建結構一部分的構建很少有用。也許這甚至是衡量是否應該在相同的總體構建中包含某些東西;如果它似乎值得在源文件夾結構中進行搭配,那麼也許它是聚合的強有力候選者。

我相信唯一的缺點就是這些東西值得整理一段時間。而且,在不創建單一構建結構的情況下,錯誤可能會更好。 。 。要處理一大堆並不真正需要的聚合父級子構建模塊是非常困難的。另一方面,將各個構建集合在一起運行是在更高級別上提供的功能,例如CI構建服務器。所以,我想我可能會建議在更獨立的方面出現錯誤。