http://maven.apache.org/plugins/maven-antrun-plugin/java
maven-antrun-plugin能讓用戶在Maven項目中運行Ant任務。用戶能夠直接在該插件的配置以Ant的方式編寫Target, 而後交給該插件的run目標去執行。在一些由Ant往Maven遷移的項目中,該插件尤爲有用。此外當你發現須要編寫一些自定義程度很高的任務,同時又覺 得Maven不夠靈活時,也能夠以Ant的方式實現之。maven-antrun-plugin的run目標一般與生命週期綁定運行。apache
http://maven.apache.org/archetype/maven-archetype-plugin/瀏覽器
Archtype指項目的骨架,Maven初學者最開始執行的Maven命令可能就是mvn archetype:generate,這實際上就是讓maven-archetype-plugin生成一個很簡單的項目骨架,幫助開發者快速上手。可能也有人看到一些文檔寫了mvn archetype:create, 但實際上create目標已經被棄用了,取而代之的是generate目標,該目標使用交互式的方式提示用戶輸入必要的信息以建立項目,體驗更好。 maven-archetype-plugin還有一些其餘目標幫助用戶本身定義項目原型,例如你由一個產品須要交付給不少客戶進行二次開發,你就能夠爲 他們提供一個Archtype,幫助他們快速上手。併發
http://maven.apache.org/plugins/maven-assembly-plugin/eclipse
maven-assembly-plugin的用途是製做項目分發包,該分發包可能包含了項目的可執行文件、源代碼、readme、平臺腳本等等。 maven-assembly-plugin支持各類主流的格式如zip、tar.gz、jar和war等,具體打包哪些文件是高度可控的,例如用戶能夠 按文件級別的粒度、文件集級別的粒度、模塊級別的粒度、以及依賴級別的粒度控制打包,此外,包含和排除配置也是支持的。maven-assembly- plugin要求用戶使用一個名爲assembly.xml
的元數據文件來表述打包,它的single目標能夠直接在命令行調用,也能夠被綁定至生命週期。maven
http://maven.apache.org/plugins/maven-dependency-plugin/工具
maven-dependency-plugin最大的用途是幫助分析項目依賴,dependency:list可以列出項目最終解析到的依賴列表,dependency:tree能進一步的描繪項目依賴樹,dependency:analyze能夠告訴你項目依賴潛在的問題,若是你有直接使用到的卻未聲明的依賴,該目標就會發出警告。maven-dependency-plugin還有不少目標幫助你操做依賴文件,例如dependency:copy-dependencies能將項目依賴從本地Maven倉庫複製到某個特定的文件夾下面。測試
http://maven.apache.org/plugins/maven-enforcer-plugin/ui
在一個稍大一點的組織或團隊中,你沒法保證全部成員都熟悉Maven,那他們作一些比較愚蠢的事情就會變得很正常,例如給項目引入了外部的 SNAPSHOT依賴而致使構建不穩定,使用了一個與你們不一致的Maven版本而常常抱怨構建出現詭異問題。maven-enforcer- plugin可以幫助你避免之類問題,它容許你建立一系列規則強制你們遵照,包括設定Java版本、設定Maven版本、禁止某些依賴、禁止 SNAPSHOT依賴。只要在一個父POM配置規則,而後讓你們繼承,當規則遭到破壞的時候,Maven就會報錯。除了標準的規則以外,你還能夠擴展該插 件,編寫本身的規則。maven-enforcer-plugin的enforce目標負責檢查規則,它默認綁定到生命週期的validate階段。spa
http://maven.apache.org/plugins/maven-help-plugin/
maven-help-plugin是一個小巧的輔助工具,最簡單的help:system能夠打印全部可用的環境變量和Java系統屬性。help:effective-pom和help:effective-settings最 爲有用,它們分別打印項目的有效POM和有效settings,有效POM是指合併了全部父POM(包括Super POM)後的XML,當你不肯定POM的某些信息從何而來時,就能夠查看有效POM。有效settings同理,特別是當你發現本身配置的 settings.xml沒有生效時,就能夠用help:effective-settings來驗證。此外,maven-help-plugin的describe目標能夠幫助你描述任何一個Maven插件的信息,還有all-profiles目標和active-profiles目標幫助查看項目的Profile。
http://maven.apache.org/plugins/maven-release-plugin/
maven-release-plugin的用途是幫助自動化項目版本發佈,它依賴於POM中的SCM信息。release:prepare用來準備版本發佈,具體的工做包括檢查是否有未提交代碼、檢查是否有SNAPSHOT依賴、升級項目的SNAPSHOT版本至RELEASE版本、爲項目打標籤等等。release:perform則 是簽出標籤中的RELEASE源碼,構建併發布。版本發佈是很是瑣碎的工做,它涉及了各類檢查,並且因爲該工做僅僅是偶爾須要,所以手動操做很容易遺漏一 些細節,maven-release-plugin讓該工做變得很是快速簡便,不易出錯。maven-release-plugin的各類目標一般直接在 命令行調用,由於版本發佈顯然不是平常構建生命週期的一部分。
http://maven.apache.org/plugins/maven-resources-plugin/
爲了使項目結構更爲清晰,Maven區別對待Java代碼文件和資源文件,maven-compiler-plugin用來編譯Java代碼,maven-resources-plugin則用來處理資源文件。默認的主資源文件目錄是src/main/resources
,不少用戶會須要添加額外的資源文件目錄,這個時候就能夠經過配置maven-resources-plugin來實現。此外,資源文件過濾也是Maven的一大特性,你能夠在資源文件中使用${propertyName}形式的Maven屬性,而後配置maven-resources-plugin開啓對資源文件的過濾,以後就能夠針對不一樣環境經過命令行或者Profile傳入屬性的值,以實現更爲靈活的構建。
http://maven.apache.org/plugins/maven-surefire-plugin/
多是因爲歷史的緣由,Maven 2/3中用於執行測試的插件不是maven-test-plugin,而是maven-surefire-plugin。其實大部分時間內,只要你的測試 類遵循通用的命令約定(以Test結尾、以TestCase結尾、或者以Test開頭),就幾乎不用知曉該插件的存在。然而在當你想要跳過測試、排除某些 測試類、或者使用一些TestNG特性的時候,瞭解maven-surefire-plugin的一些配置選項就頗有用了。例如 mvn test -Dtest=FooTest 這樣一條命令的效果是僅運行FooTest測試類,這是經過控制maven-surefire-plugin的test參數實現的。
http://mojo.codehaus.org/build-helper-maven-plugin/
Maven默認只容許指定一個主Java代碼目錄和一個測試Java代碼目錄,雖然這實際上是個應當儘可能遵照的約定,但偶爾你仍是會但願可以指定多個 源碼目錄(例如爲了應對遺留項目),build-helper-maven-plugin的add-source目標就是服務於這個目的,一般它被綁定到 默認生命週期的generate-sources階段以添加額外的源碼目錄。須要強調的是,這種作法仍是不推薦的,由於它破壞了 Maven的約定,並且可能會遇到其餘嚴格遵照約定的插件工具沒法正確識別額外的源碼目錄。
build-helper-maven-plugin的另外一個很是有用的目標是attach-artifact,使用該目標你能夠以classifier的形式選取部分項目文件生成附屬構件,並同時install到本地倉庫,也能夠deploy到遠程倉庫。
http://mojo.codehaus.org/exec-maven-plugin/
exec-maven-plugin很好理解,顧名思義,它能讓你運行任何本地的系統程序,在某些特定狀況下,運行一個Maven外部的程序可能就是最簡單的問題解決方案,這就是exec:exec的 用途,固然,該插件還容許你配置相關的程序運行參數。除了exec目標以外,exec-maven-plugin還提供了一個java目標,該目標要求你 提供一個mainClass參數,而後它可以利用當前項目的依賴做爲classpath,在同一個JVM中運行該mainClass。有時候,爲了簡單的 演示一個命令行Java程序,你能夠在POM中配置好exec-maven-plugin的相關運行參數,而後直接在命令運行 mvn exec:java 以查看運行效果。
http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin
在進行Web開發的時候,打開瀏覽器對應用進行手動的測試幾乎是沒法避免的,這種測試方法一般就是將項目打包成war文件,而後部署到Web容器 中,再啓動容器進行驗證,這顯然十分耗時。爲了幫助開發者節省時間,jetty-maven-plugin應運而生,它徹底兼容 Maven項目的目錄結構,可以週期性地檢查源文件,一旦發現變動後自動更新到內置的Jetty Web容器中。作一些基本配置後(例如Web應用的contextPath和自動掃描變動的時間間隔),你只要執行 mvn jetty:run ,而後在IDE中修改代碼,代碼經IDE自動編譯後產生變動,再由jetty-maven-plugin偵測到後更新至Jetty容器,這時你就能夠直接 測試Web頁面了。須要注意的是,jetty-maven-plugin並非宿主於Apache或Codehaus的官方插件,所以使用的時候須要額外 的配置settings.xml
的pluginGroups元素,將org.mortbay.jetty這個pluginGroup加入。
http://mojo.codehaus.org/versions-maven-plugin/
不少Maven用戶遇到過這樣一個問題,當項目包含大量模塊的時候,爲他們集體更新版本就變成一件煩人的事情,到底有沒有自動化工具能幫助完成這件 事情呢?(固然你可使用sed之類的文本操做工具,不過不在本文討論範圍)答案是確定的,versions-maven- plugin提供了不少目標幫助你管理Maven項目的各類版本信息。例如最經常使用的,命令 mvn versions:set -DnewVersion=1.1-SNAPSHOT 就能幫助你把全部模塊的版本更新到1.1-SNAPSHOT。該插件還提供了其餘一些頗有用的目標,display-dependency- updates能告訴你項目依賴有哪些可用的更新;相似的display-plugin-updates能告訴你可用的插件更新;而後use- latest-versions能自動幫你將全部依賴升級到最新版本。最後,若是你對所作的更改滿意,則可使用 mvn versions:commit 提交,不滿意的話也可使用 mvn versions:revert 進行撤銷。