簡體   English   中英

Maven默認生命周期和插件部分

[英]Maven default life-cycle and plugins section

如果我錯了,請糾正我。 如果在Maven pom.xml未定義包裝類型,則默認使用jar lifecyle。

每個Maven打包類型都有一個默認的構建生命周期和相關的默認目標。 (我們可以將目標視為插件+命令

生命周期階段目標

  • 流程資源資源:資源
  • 編譯編譯器:compile
  • 流程測試資源資源:testResources
  • 測試編譯編譯器:testCompile
  • 測試surefire:測試
  • 包裝jar:jar
  • 安裝安裝:安裝
  • 部署部署:部署

我的問題是
在定義包裝類型時,我們是否可以說好像pom.xml插件部分填充了該包裝構建生命周期的默認插件和目標?

也:
如果我們在“插件”部分中定義插件,例如編譯器插件,並給出其配置,這些配置是否會覆蓋插件的默認配置?

如果未在Maven pom.xml中定義包裝類型,則使用jar lifecyle。

幾乎正確, jar不是生命周期,而是包裝。 Maven具有三個 構建生命周期 (干凈,默認,現場),可以應用於任何包裝。

按照官方Maven模型

packaging此項目生成的工件的類型,例如jar war ear pom。 插件可以創建自己的包裝,因此可以創建自己的包裝類型,因此此列表並不包含所有可能的類型。
默認值為jar


每個Maven打包類型都有默認的構建生命周期

它沒有默認的生命周期,您可以在其項目上調用默認的生命周期。 它具有默認生命周期的默認綁定 ,也就是說,默認情況下已根據定義的packaging類型將插件附加到默認生命周期的各個階段。

Maven的核心概念之一是約定優於配置 它的默認綁定強制執行了這一原理,已經為給定的包裝提供了某些插件的某些目標的執行。
例如,默認情況下,已經希望進行編譯(通過maven-compiler-plugin及其在compile階段的compile目標),測試(通過maven-surefire-plugin及其在test階段的test目標)和打包(通過使用maven-jar-plugin及其在package階段的jar目標)在應用默認( jar )打包時的項目。
(請注意模式:我提到了一個插件,一個目標,一個階段,即默認綁定)。

這就是為什么最小pom已經可以做很多事情的原因:再次,這是對配置的約定。


在定義包裝類型時,我們是否可以說好像pom.xml插件部分填充了該包裝構建生命周期的默認插件和目標?

確實,這就像使用默認的附加插件和目標的執行填充構建plugins部分,並使用其默認配置將其分配給某些階段。
另外還要注意,如果您添加了相同插件和目標的進一步執行,則它將在默認綁定指定的插件之上(之后)被調用。 必要時,請參見下文如何預防。


如果我們在“插件”部分中定義了一個插件,例如編譯器插件,並為其提供了配置,這些配置是否會覆蓋插件的默認配置?

您可以定義附加到某個階段的其他插件和它們的一個或多個目標的executions 每個execution可以有一個自定義configuration 然而, configuration這不是任何內execution部,但聲明為通用/全局配置將被應用到所關注的插件的任何執行 ,因此也通過包裝綁定默認附着的那些。

來自configuration元素的官方POM參考

默認行為是根據元素名稱合並configuration元素的內容。 如果子POM具有特定元素,則該值將成為有效值。 如果子POM沒有元素,但父POM沒有元素,則父值成為有效值。

關於execution部分的configuration元素:

configuration :與上面相同,但將配置限制在此特定目標列表中,而不是插件下的所有目標中。

這就是為什么您經常看到maven-compiler-plugin的不同source / target配置,而沒有execution任何內容的原因。 它將應用於已通過默認綁定附加的compile (源代碼編譯)和testCompile (測試代碼編譯)目標的默認執行。

此外,你甚至可以覆蓋默認綁定並通過添加從某個階段刪除它execution了相同的插件,同樣的目標, 同樣執行ID(最重要的一點),並將其連接到一個不同的階段,或者一個不存在的相位(或為空)。 這樣,您將禁用默認插件目標執行。 您還可以使用該技巧將插件目標執行添加為同一階段的第一次執行:通過禁用默認執行,添加執行,然后重新定義默認執行(然后使用不同的ID)。 然后,Maven將遵循執行聲明的順序。

檢查有關如何生成執行ID的此答案 這里的重點是來自Maven官方文檔

通過指定POM包裝的默認生命周期映射綁定到構建生命周期的每個mojo都將為其分配一個default-goalName執行ID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM