經常使用Maven插件介紹(下)

轉自:http://www.infoq.com/cn/news/2011/05/xxb-maven-8-plugin   html


 咱們都知道Maven本質上是一個插件框架,它的核心並不執行任何具體的構建任務,全部這些任務都交給插件來完成,例如編譯源代碼是由maven- compiler-plugin完成的。進一步說,每一個任務對應了一個插件目標(goal),每一個插件會有一個或者多個目標,例如maven- compiler-plugin的compile目標用來編譯位於src/main/java/目錄下的主源碼,testCompile目標用來編譯位於src/test/java/目錄下的測試源碼。java

用戶能夠經過兩種方式調用Maven插件目標。第一種方式是將插件目標與生命週期階段(lifecycle phase)綁定,這樣用戶在命令行只是輸入生命週期階段而已,例如Maven默認將maven-compiler-plugin的compile目標與compile生命週期階段綁定,所以命令mvn compile其實是先定位到compile這一輩子命週期階段,而後再根據綁定關係調用maven-compiler-plugin的compile目標。第二種方式是直接在命令行指定要執行的插件目標,例如mvn archetype:generate 就表示調用maven-archetype-plugin的generate目標,這種帶冒號的調用方式與生命週期無關。apache

認識上述Maven插件的基本概念能幫助你理解Maven的工做機制,不過要想更高效率地使用Maven,瞭解一些經常使用的插件仍是頗有必要的,這能夠幫助你避免一不當心從新發明輪子。多年來Maven社區積累了大量的經驗,並隨之造成了一個成熟的插件生態圈。Maven官方有兩個插件列表,第一個列表的GroupId爲org.apache.maven.plugins,這裏的插件最爲成熟,具體地址爲:http://maven.apache.org/plugins/index.html。第二個列表的GroupId爲org.codehaus.mojo,這裏的插件沒有那麼核心,但也有很多十分有用,其地址爲:http://mojo.codehaus.org/plugins.html瀏覽器

接下來筆者根據本身的經驗介紹一些最經常使用的Maven插件,在不一樣的環境下它們各自都有其出色的表現,熟練地使用它們能讓你的平常構建工做事半功倍。本文爲下半部分。(上半部份內容參見Maven實戰(七)——經常使用Maven插件介紹(上) 框架

maven-resources-plugin

http://maven.apache.org/plugins/maven-resources-plugin/eclipse

爲了使項目結構更爲清晰,Maven區別對待Java代碼文件和資源文件,maven-compiler-plugin用來編譯Java代碼,maven-resources-plugin則用來處理資源文件。默認的主資源文件目錄是src/main/resources,不少用戶會須要添加額外的資源文件目錄,這個時候就能夠經過配置maven-resources-plugin來實現。此外,資源文件過濾也是Maven的一大特性,你能夠在資源文件中使用${propertyName}形式的Maven屬性,而後配置maven-resources-plugin開啓對資源文件的過濾,以後就能夠針對不一樣環境經過命令行或者Profile傳入屬性的值,以實現更爲靈活的構建。maven

maven-surefire-plugin

http://maven.apache.org/plugins/maven-surefire-plugin/ide

多是因爲歷史的緣由,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參數實現的。工具

build-helper-maven-plugin

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到遠程倉庫。

exec-maven-plugin

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 以查看運行效果。

jetty-maven-plugin

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加入。

versions-maven-plugin

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 進行撤銷。

小結

本文介紹了一些最經常使用的Maven插件,這裏指的「經常使用」是指常常須要進行配置的插件,事實上咱們用Maven的時候不少其它插件也是必須的,例如默認的編譯插件maven-compiler-plugin和默認的打包插件maven-jar-plugin,但由於不多須要對它們進行配置,所以不在本文討論範圍。瞭解經常使用的Maven插件能幫助你事倍功半地完成項目構建任務,反之你就可能會由於常常遇到一些難以解決的問題而感到沮喪。本文介紹的插件基本能覆蓋大部分Maven用戶的平常使用須要,若是你真有很是特殊的需求,自行編寫一個Maven插件也不是難事,更況且還有這麼多開放源代碼的插件供你參考。

本文的這個插件列表並非一個完整列表,讀者有興趣的話也能夠去仔細瀏覽一下Apache和Codehaus Mojo的Maven插件列表,以的到一個更爲全面的認識。最後,在線的Maven倉庫搜索引擎如http://search.maven.org/也能幫助你快速找到本身感興趣的Maven插件。

相關文章
相關標籤/搜索