maven的任何行爲都是通過插件完成的,包括項目的清理、編譯、測試及打包等操作都有其對應的插件。每個插件都有一個或多個目標(可以當作方法),用戶可直接通過
命令行(將插件加到settings.xml文件中,可直接通過插件名稱及目標執行)運行這些插件目標或將插件目標綁定到maven的生命週期(可使用默認,也可自定義)。
插件主要分佈於apache、codehaus,還有googlecode、sourceforge和github,無法搜索到滿足需求的插件時,可自行開發maven插件。
一、maven插件開發流程
創建一個maven-plugin項目:本身也是maven項目,特殊packaging必須是maven-plugin
爲插件編寫目標:每一個插件都包含一個或多個目標(方法),maven稱之爲mojo,提供一個或多個繼承子AbstractMojo的類
爲目標(mojo)提供配置點:提供可配置的參數
編寫代碼實現目標行爲:實現mojo的功能
處理錯誤及日誌:當發生異常時,根據情況控制maven的運行狀態,並將信息記錄到日誌中去
測試插件:編寫自動化的測試代碼測試行爲。
二、編寫maven插件
1、引入maven-archetype-plugin插件,使用mvn archetype:generate創建maven工程
2、pom.xml文件中的packaging的值maven-plugin,且引入maven-plugin-api(插件開發必須的類)依賴。
3、創建一個mojo並實現其功能:
繼承AbstractMojo;實現execute()方法;提供@goal。
每個插件目標類或Mojo,都必須繼承子AbstractMojo並實現execute()方法,只有這樣maven才能識別該插件並執行execute(0方法
中的行爲。同時須在mojo上添加@goal標註(如@goal count表示一個目標爲count的mojo),標註自己目標名稱後,有了插件目標定義後,才能在項目中配置或命令行調用
4、運行
mvn com.juvenxu.mvnbook:maven-loc-plugin:0.0.1-SANPSHOT:count
將插件的groupId引入到settings.xml文件中,運行命令如下:mvn loc:count
三、maven插件測試
1、可以使用單元測試方式
2、將插件安裝到本地倉庫後,再找個項目測試該插件
3、使用maven-invoker-plugin插件測試插件進行測試,可用來在一組項目上執行maven,同時,支持BeanShell及Groovy等語言
該插件支持如下參數:
debug(boolean):構建時是否開啓debug
settingsFile(File):測試使用的settings.xml文件,默認本機環境倉庫
localRepositoryPath(File):測試使用本地倉庫
preBuildHookScript(String):構建之前運行的腳本
postBuildHookScript(String):構建後運行的腳本
<postBuildHookScript>validate.groovy</postBuildHookScript>