2017-08-06 83 views
2

在Maven多模型中,我們有一個父模塊,模塊定義在標籤中,並且在每個模型中,我們定義了父模塊的名稱。使用多模塊maven項目的正確方法

爲什麼這個雙向定義?爲什麼不在父母中定義?我如何重用模塊,如果它們總是綁定到一個父級?

回答

3

爲什麼這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項目指定爲其模塊。

+0

好極了,現在一切都合理了,我會用項目聚合。 –

+0

不客氣。有趣的問題。我編輯,使我的答案更完整。 – davidxxx

1

因爲當你建立一些子模塊時,它現在應該有一些元信息,比如依賴版本,例如,將這個依賴關係放入父pom dependencyManagement通常是一個更好的做法,因爲我會讓所有子模塊使用相同的庫版。還有另一個元信息可能是有用的,如properties

因此,總而言之,當您構建一個特定子模塊時,mavben應該知道您通常會在父類pom中設置的一些信息。

我相信可以有更多的理由,但這對我來說是最明顯的。

如果你想在我看來重用模塊,那麼你需要這些模塊是一個庫,並通過dependency標籤作爲庫添加它們。

+2

簡而言之:parent是針對版本,依賴關係,通用插件配置的,而模塊則定義了要構建的項目。他們可以不同。對於大型項目而言,它經常是有用的。 – Vadim