2012-12-19 17 views

回答

12

這2個部分(pluginspluginManagement)有略微不同的目的。

第一個(plugins)用於指定項目(以及從父項目繼承的所有子項目)的構建過程。如果您在本節中包含一些插件,它將在每個子項目中執行,而不管其類型如何。

第二個(pluginManagement)用於爲從父項目繼承的所有項目(例如,插件版本和配置)指定通用插件設置。

說到你提到的2個插件。 maven-compiler-plugin是一個默認插件,無論您是否指定,它都將被執行。將它包含在pluginManagement中並在其中指定其配置是有意義的。然而,默認情況下,maven-release-plugin未綁定到任何生命週期階段。因此,如果您希望在您的所有子項目中執行它,則必須將其添加到plugins部分。

+0

謝謝你的明確答案。你能解釋一下,爲什麼'maven-compiler-plugin'不是默認執行,而不是'maven-release-plugin'?或者我可以在生命週期階段看到默認執行的插件列表? – MyTitle

+0

不客氣。默認插件列表及其目標取決於項目包裝。你可以閱讀更多關於它[這裏](http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Built-in_Lifecycle_Bindings)(實際上,整個頁面值得一讀)。 –

+0

另外呢'maven-surfire-plugin'?在你的解釋之後,我認爲它應該放在pluginManagement裏,因爲它限制了maven的「測試」階段..這是真的嗎? – MyTitle

0

這取決於你在做什麼。如果您將它們包含在plugins部分中,則它們將針對所有POM執行... ,其中包括父項。如果您只希望孩子POM執行插件目標,那麼您應該將它們放在pluginManagement之下。但是,在這種情況下,您必須在每個孩子POM中啓用它們。

也就是說,最簡單的事情是先嚐試plugins。如果沒有構建失敗,那麼你很好。否則,您將需要移動一些或全部到pluginManagement

+0

因此,在''部分(如果是root的pom.xml),我們可以在子模塊中展開我們需要的所有插件(沒有在子模塊中明確地將它們分開)。在''裏面我們只聲明插件_configuration_(例如版本),我們仍然需要在子模塊中聲明它們? – MyTitle