在Maven多模型中,我們有一個父模塊,模塊定義在標籤中,並且在每個模型中,我們定義了父模塊的名稱。使用多模塊maven項目的正確方法
爲什麼這個雙向定義?爲什麼不在父母中定義?我如何重用模塊,如果它們總是綁定到一個父級?
在Maven多模型中,我們有一個父模塊,模塊定義在標籤中,並且在每個模型中,我們定義了父模塊的名稱。使用多模塊maven項目的正確方法
爲什麼這個雙向定義?爲什麼不在父母中定義?我如何重用模塊,如果它們總是綁定到一個父級?
爲什麼這2種定義?
這不是強制性的。這是一個設計選擇。
爲什麼不在父母身上定義?
如果您只在父pom的modules
標記中定義它們,那麼您將只使用Maven的reactor/aggregation特性。
1)聚合(<modules>
聲明的超級聚合項目),主要提供以下功能:
收集所有可用的模塊,來構建
排序的項目到正確的構建順序
按順序生成所選項目
聚集模塊是通過聲明模塊在父POM聚集啓用:
<modules>
<module>my-child</module>
<module>my-other-child</module>
</modules>
但聚集沒有提供繼承。
2)項目繼承(<parent>
聲明在子模塊)提供的多件事情從父聲明到子模塊的繼承:
從實際文檔,從父POM大多數元素繼承由其子女。
:
的groupId
版本
描述
網址
inceptionYear
組織
個許可證
開發商
貢獻者
MAILINGLISTS
SCM
issueManagement
ciManagement
屬性
dependencyManagement
依賴性
庫
pluginRepositories
構建
與匹配ID
插件配置
插件處決他們的<parent> <groupId>my-group</groupId> <artifactId>my-parent</artifactId> <version>1.0.0</version> </parent> <!-- You can note that groupId and version are not filled for the current project. These are optional as inherited from the parent --> <artifactId>my-artifact</artifactId>
事實上,你可以使用項目繼承,項目組成,沒有:
報告
型材
繼承是通過聲明的孩子勁歌父神器啓用或兩者。
這是一個真正的設計選擇,應該根據項目和他們的要求之間的關係來完成。
你可以參考this interesting point on the Maven documentation關於這兩個功能:
項目傳承VS項目聚集
如果你有幾個Maven項目,它們都具有類似的 配置,您可以重構通過拉出那些類似配置並製作父項目的項目。因此,你要做的所有事情就是讓你的Maven項目繼承父項目,然後這些配置將被應用於所有這些項目。
如果您有一組與 一起構建或處理的項目,則可以創建一個父項目並讓該父項目 將這些項目聲明爲其模塊。通過這樣做,您只需要 構建父級,其餘的將隨之而來。
但是,當然,您可以同時擁有項目繼承和項目 聚合。也就是說,您可以讓您的模塊指定父項目 ,同時讓該父項目將這些 Maven項目指定爲其模塊。
因爲當你建立一些子模塊時,它現在應該有一些元信息,比如依賴版本,例如,將這個依賴關係放入父pom dependencyManagement
通常是一個更好的做法,因爲我會讓所有子模塊使用相同的庫版。還有另一個元信息可能是有用的,如properties
。
因此,總而言之,當您構建一個特定子模塊時,mavben應該知道您通常會在父類pom中設置的一些信息。
我相信可以有更多的理由,但這對我來說是最明顯的。
如果你想在我看來重用模塊,那麼你需要這些模塊是一個庫,並通過dependency
標籤作爲庫添加它們。
簡而言之:parent是針對版本,依賴關係,通用插件配置的,而模塊則定義了要構建的項目。他們可以不同。對於大型項目而言,它經常是有用的。 – Vadim
好極了,現在一切都合理了,我會用項目聚合。 –
不客氣。有趣的問題。我編輯,使我的答案更完整。 – davidxxx