[英]Adding phases to the maven lifecycle?
我嘗試向 maven 生命周期添加一些額外的階段。 主要是增加一些額外的測試關卡:
<phases>
<phase>initialize</phase>
<phase>process-resources</phase>
<phase>compile</phase>
<phase>process-test-resources</phase>
<phase>test-compile</phase>
<phase>test</phase>
<phase>prepare-package</phase>
<phase>package</phase>
<phase>pre-integration-test</phase>
<phase>integration-test</phase>
<phase>post-integration-test</phase>
<phase>pre-application-test</phase>
<phase>application-test</phase>
<phase>post-application-test</phase>
<phase>pre-system-test</phase>
<phase>system-test</phase>
<phase>post-system-test</phase>
<phase>finalize-tests</phase>
<phase>install</phase>
<phase>deploy</phase>
</phases>
以上包含新的應用程序測試和系統測試階段(包括前和后)。
我已經在以下位置啟動了一個測試插件: codezoo-lifecycle-maven-plugin我用於測試的 pom 在src/it文件夾中。
似乎新階段或有所回升,但發生了一些奇怪的事情:
mvn post-application-test
這行得通。 我為測試添加的 echo 插件也被執行。 但是有一些警告(使用maven 3.3.9)。
mvn install
跳過新階段執行默認生命周期。
如果我將生命周期的 ID 從“測試級別”更改為“默認”,則階段將執行兩次。
發出的警告是:
[WARNING] Duplicated lifecycle phase package. Defined in default but also in test-levels
[WARNING] Duplicated lifecycle phase pre-integration-test. Defined in default but also in test-levels
[WARNING] Duplicated lifecycle phase integration-test. Defined in default but also in test-levels
....
發出此警告的源代碼表明生命周期的命名空間不正確。 但我不知道這是怎么做到的。
我在 web: create-a-new-phase (Stackoverflow) 或其他插件如maven-scm-publish-plugin或docker-maven-plugin中發現了一些提示。 但是那些要么創建一個完整的新生命周期,要么只是更改默認 maven 生命周期的插件映射。
web 上關於此主題的所有其他內容似乎至少已有 4 年歷史了......
所以:
謝謝!
我不確定是否可以修改開箱即用包裝類型的默認生命周期,但有其他選擇。 您可以采用定義自己的插件的方法(使用或不使用自定義打包類型),或者您可以簡單地向默認生命周期添加一些額外的測試執行。
選項 1 - 為標准包裝創建一個具有自定義生命周期的新插件
使用這種方法,您可以定義一個全新的生命周期並明確指定階段。
優點:
缺點:
有關演練,請參閱此博客文章。 然后,您需要運行mvn custom_install
而不是運行mvn install
。 您可能可以更進一步並定義您自己的自定義包裝類型
選項 2 - 使用自定義打包類型創建一個新插件,並定義默認生命周期
這可能是最接近您采取的方法的方法。 有關示例,請參閱此博客文章。
如果你采用這種方法,你的項目只需要聲明<packaging>my-custom-packaging</packaging>
除了添加帶有<extensions>true</extensions>
插件。
優點:
缺點:
jar
、 war
、 ear
等),您需要在插件中定義每種打包類型的自定義版本。選項 3 - 將插件執行添加到默認生命周期
如果您願意在這些測試運行的生命周期中的確切時間失去一些控制,您可以簡單地將新插件執行綁定到默認生命周期。 我只是在尋找如何做到這一點並瀏覽了這篇描述解決方案的博客文章。
優點:
缺點:
本質上,您所要做的就是定義一個新的插件執行,並在執行 ID 前加上default-
。 這是我剛剛使用Maven Failsafe Plugin完成的一個示例,用於將integration-test
和verify
目標添加到帶有jar
包裝的項目的默認生命周期中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.1</version>
<executions>
<execution>
<id>default-system-test</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
當我運行mvn clean install
,執行作為構建過程的一部分發生。
可以看一下mvn-finisher插件,里面增加了maven build end調用的幾個階段(成功,失敗,中斷)
24 phases
的build
生命周期custom plugin
,請實施您的自定義插件並將其綁定到最合適的任何phase
。當然,您可以根據需要使項目變得盡可能復雜,但通常認為添加生命周期和階段是不好的做法,直到您在構建生命周期的上下文中沒有非常大的事情要管理。
通常在您需要額外構建階段的情況下 - 這是您需要拆分代碼並將其一部分移動到專用於單獨功能的其他 maven 模塊的信號。
添加模塊之間的依賴關系,因此在開始構建Maven構建模塊圖后的結果並按照預期順序構建它們,一一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.