重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
這篇文章主要介紹了常用Maven插件有哪些,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比新建網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式新建網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋新建地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
我們都知道Maven本質(zhì)上是一個(gè)插件框架,它的核心并不執(zhí)行任何具體的構(gòu)建任務(wù),所有這些任務(wù)都交給插件來(lái)完成,例如編譯源代碼是由maven- compiler-plugin完成的。
進(jìn)一步說(shuō),每個(gè)任務(wù)對(duì)應(yīng)了一個(gè)插件目標(biāo)(goal),每個(gè)插件會(huì)有一個(gè)或者多個(gè)目標(biāo),例如maven- compiler-plugin的compile目標(biāo)用來(lái)編譯位于src/main/java/
目錄下的主源碼,testCompile目標(biāo)用來(lái)編譯位于src/test/java/
目錄下的測(cè)試源碼。
用戶可以通過(guò)兩種方式調(diào)用Maven插件目標(biāo)。第一種方式是將插件目標(biāo)與生命周期階段(lifecycle phase)綁定,這樣用戶在命令行只是輸入生命周期階段而已,例如Maven默認(rèn)將maven-compiler-plugin的compile目標(biāo)與 compile生命周期階段綁定,因此命令mvn compile實(shí)際上是先定位到compile這一生命周期階段,然后再根據(jù)綁定關(guān)系調(diào)用maven-compiler-plugin的compile目標(biāo)。
第二種方式是直接在命令行指定要執(zhí)行的插件目標(biāo),例如mvn archetype:generate就表示調(diào)用maven-archetype-plugin的generate目標(biāo),這種帶冒號(hào)的調(diào)用方式與生命周期無(wú)關(guān)。
認(rèn)識(shí)上述Maven插件的基本概念能幫助你理解Maven的工作機(jī)制,不過(guò)要想更高效率地使用Maven,了解一些常用的插件還是很有必要的,這可 以幫助你避免一不小心重新發(fā)明輪子。關(guān)于系列 Maven 教程,可以關(guān)注公眾號(hào)Java技術(shù)棧回復(fù)Maven獲取。
多年來(lái)Maven社區(qū)積累了大量的經(jīng)驗(yàn),并隨之形成了一個(gè)成熟的插件生態(tài)圈。Maven官方有兩個(gè)插件列表,第一個(gè)列 表的GroupId為org.apache.maven.plugins,這里的插件最為成熟,具體地址為:http://maven.apache.org/plugins/index.html。第二個(gè)列表的GroupId為org.codehaus.mojo,這里的插件沒(méi)有那么核心,但也有不少十分有用,其地址為:http://mojo.codehaus.org/plugins.html。
接下來(lái)筆者根據(jù)自己的經(jīng)驗(yàn)介紹一些最常用的Maven插件,在不同的環(huán)境下它們各自都有其出色的表現(xiàn),熟練地使用它們能讓你的日常構(gòu)建工作事半功倍。
http://maven.apache.org/plugins/maven-antrun-plugin/
maven-antrun-plugin能讓用戶在Maven項(xiàng)目中運(yùn)行Ant任務(wù)。用戶可以直接在該插件的配置以Ant的方式編寫Target, 然后交給該插件的run目標(biāo)去執(zhí)行。在一些由Ant往Maven遷移的項(xiàng)目中,該插件尤其有用。
此外當(dāng)你發(fā)現(xiàn)需要編寫一些自定義程度很高的任務(wù),同時(shí)又覺(jué) 得Maven不夠靈活時(shí),也可以以Ant的方式實(shí)現(xiàn)之。maven-antrun-plugin的run目標(biāo)通常與生命周期綁定運(yùn)行。
http://maven.apache.org/archetype/maven-archetype-plugin/
Archtype指項(xiàng)目的骨架,Maven初學(xué)者最開(kāi)始執(zhí)行的Maven命令可能就是mvn archetype:generate,這實(shí)際上就是讓maven-archetype-plugin生成一個(gè)很簡(jiǎn)單的項(xiàng)目骨架,幫助開(kāi)發(fā)者快速上手。
可能也有人看到一些文檔寫了**mvn **archetype:create, 但實(shí)際上create目標(biāo)已經(jīng)被棄用了,取而代之的是generate目標(biāo),該目標(biāo)使用交互式的方式提示用戶輸入必要的信息以創(chuàng)建項(xiàng)目,體驗(yàn)更好。
maven-archetype-plugin還有一些其他目標(biāo)幫助用戶自己定義項(xiàng)目原型,例如你由一個(gè)產(chǎn)品需要交付給很多客戶進(jìn)行二次開(kāi)發(fā),你就可以為 他們提供一個(gè)Archtype,幫助他們快速上手。
http://maven.apache.org/plugins/maven-assembly-plugin/
maven-assembly-plugin的用途是制作項(xiàng)目分發(fā)包,該分發(fā)包可能包含了項(xiàng)目的可執(zhí)行文件、源代碼、readme、平臺(tái)腳本等等。
maven-assembly-plugin支持各種主流的格式如zip、tar.gz、jar和war等,具體打包哪些文件是高度可控的,例如用戶可以 按文件級(jí)別的粒度、文件集級(jí)別的粒度、模塊級(jí)別的粒度、以及依賴級(jí)別的粒度控制打包,此外,包含和排除配置也是支持的。
maven-assembly- plugin要求用戶使用一個(gè)名為assembly.xml
的元數(shù)據(jù)文件來(lái)表述打包,它的single目標(biāo)可以直接在命令行調(diào)用,也可以被綁定至生命周期。關(guān)于系列 Maven 教程,可以關(guān)注公眾號(hào)Java技術(shù)棧回復(fù)Maven獲取。
http://maven.apache.org/plugins/maven-dependency-plugin/
maven-dependency-plugin最大的用途是幫助分析項(xiàng)目依賴,dependency:list能夠列出項(xiàng)目最終解析到的依賴列表,dependency:tree能進(jìn)一步的描繪項(xiàng)目依賴樹(shù),dependency:analyze可以告訴你項(xiàng)目依賴潛在的問(wèn)題,如果你有直接使用到的卻未聲明的依賴,該目標(biāo)就會(huì)發(fā)出警告。
maven-dependency-plugin還有很多目標(biāo)幫助你操作依賴文件,例如dependency:copy-dependencies能將項(xiàng)目依賴從本地Maven倉(cāng)庫(kù)復(fù)制到某個(gè)特定的文件夾下面。
http://maven.apache.org/plugins/maven-enforcer-plugin/
在一個(gè)稍大一點(diǎn)的組織或團(tuán)隊(duì)中,你無(wú)法保證所有成員都熟悉Maven,那他們做一些比較愚蠢的事情就會(huì)變得很正常,例如給項(xiàng)目引入了外部的 SNAPSHOT依賴而導(dǎo)致構(gòu)建不穩(wěn)定,使用了一個(gè)與大家不一致的Maven版本而經(jīng)常抱怨構(gòu)建出現(xiàn)詭異問(wèn)題。
maven-enforcer- plugin能夠幫助你避免之類問(wèn)題,它允許你創(chuàng)建一系列規(guī)則強(qiáng)制大家遵守,包括設(shè)定Java版本、設(shè)定Maven版本、禁止某些依賴、禁止 SNAPSHOT依賴。
只要在一個(gè)父POM配置規(guī)則,然后讓大家繼承,當(dāng)規(guī)則遭到破壞的時(shí)候,Maven就會(huì)報(bào)錯(cuò)。除了標(biāo)準(zhǔn)的規(guī)則之外,你還可以擴(kuò)展該插 件,編寫自己的規(guī)則。maven-enforcer-plugin的enforce目標(biāo)負(fù)責(zé)檢查規(guī)則,它默認(rèn)綁定到生命周期的validate階段。
http://maven.apache.org/plugins/maven-help-plugin/
maven-help-plugin是一個(gè)小巧的輔助工具,最簡(jiǎn)單的help:system可以打印所有可用的環(huán)境變量和Java系統(tǒng)屬性。help:effective-pom和help:effective-settings最 為有用,它們分別打印項(xiàng)目的有效POM和有效settings,有效POM是指合并了所有父POM(包括Super POM)后的XML,當(dāng)你不確定POM的某些信息從何而來(lái)時(shí),就可以查看有效POM。
有效settings同理,特別是當(dāng)你發(fā)現(xiàn)自己配置的 settings.xml沒(méi)有生效時(shí),就可以用help:effective-settings來(lái)驗(yàn)證。此外,maven-help-plugin的describe目標(biāo)可以幫助你描述任何一個(gè)Maven插件的信息,還有all-profiles目標(biāo)和active-profiles目標(biāo)幫助查看項(xiàng)目的Profile。
http://maven.apache.org/plugins/maven-release-plugin/
maven-release-plugin的用途是幫助自動(dòng)化項(xiàng)目版本發(fā)布,它依賴于POM中的SCM信息。30 個(gè)常用的 Maven 命令,這篇推薦大家看一下。
release:prepare用來(lái)準(zhǔn)備版本發(fā)布,具體的工作包括檢查是否有未提交代碼、檢查是否有SNAPSHOT依賴、升級(jí)項(xiàng)目的SNAPSHOT版本至RELEASE版本、為項(xiàng)目打標(biāo)簽等等。
release:perform則 是簽出標(biāo)簽中的RELEASE源碼,構(gòu)建并發(fā)布。版本發(fā)布是非常瑣碎的工作,它涉及了各種檢查,而且由于該工作僅僅是偶爾需要,因此手動(dòng)操作很容易遺漏一 些細(xì)節(jié),maven-release-plugin讓該工作變得非常快速簡(jiǎn)便,不易出錯(cuò)。maven-release-plugin的各種目標(biāo)通常直接在 命令行調(diào)用,因?yàn)榘姹景l(fā)布顯然不是日常構(gòu)建生命周期的一部分。
http://maven.apache.org/plugins/maven-resources-plugin/
為了使項(xiàng)目結(jié)構(gòu)更為清晰,Maven區(qū)別對(duì)待Java代碼文件和資源文件,maven-compiler-plugin用來(lái)編譯Java代碼,maven-resources-plugin則用來(lái)處理資源文件。
默認(rèn)的主資源文件目錄是src/main/resources
,很多用戶會(huì)需要添加額外的資源文件目錄,這個(gè)時(shí)候就可以通過(guò)配置maven-resources-plugin來(lái)實(shí)現(xiàn)。
此外,資源文件過(guò)濾也是Maven的一大特性,你可以在資源文件中使用_${propertyName}_形式的Maven屬性,然后配置maven-resources-plugin開(kāi)啟對(duì)資源文件的過(guò)濾,之后就可以針對(duì)不同環(huán)境通過(guò)命令行或者Profile傳入屬性的值,以實(shí)現(xiàn)更為靈活的構(gòu)建。
http://maven.apache.org/plugins/maven-surefire-plugin/
可能是由于歷史的原因,Maven 2/3中用于執(zhí)行測(cè)試的插件不是maven-test-plugin,而是maven-surefire-plugin。其實(shí)大部分時(shí)間內(nèi),只要你的測(cè)試 類遵循通用的命令約定(以Test結(jié)尾、以TestCase結(jié)尾、或者以Test開(kāi)頭),就幾乎不用知曉該插件的存在。
然而在當(dāng)你想要跳過(guò)測(cè)試、排除某些 測(cè)試類、或者使用一些TestNG特性的時(shí)候,了解maven-surefire-plugin的一些配置選項(xiàng)就很有用了。
例如 mvn test -Dtest=FooTest這樣一條命令的效果是僅運(yùn)行FooTest測(cè)試類,這是通過(guò)控制maven-surefire-plugin的test參數(shù)實(shí)現(xiàn)的。
http://mojo.codehaus.org/build-helper-maven-plugin/
Maven默認(rèn)只允許指定一個(gè)主Java代碼目錄和一個(gè)測(cè)試Java代碼目錄,雖然這其實(shí)是個(gè)應(yīng)當(dāng)盡量遵守的約定,但偶爾你還是會(huì)希望能夠指定多個(gè) 源碼目錄(例如為了應(yīng)對(duì)遺留項(xiàng)目),build-helper-maven-plugin的add-source目標(biāo)就是服務(wù)于這個(gè)目的,通常它被綁定到 默認(rèn)生命周期的generate-sources階段以添加額外的源碼目錄。
需要強(qiáng)調(diào)的是,這種做法還是不推薦的,因?yàn)樗茐牧?Maven的約定,而且可能會(huì)遇到其他嚴(yán)格遵守約定的插件工具無(wú)法正確識(shí)別額外的源碼目錄。
build-helper-maven-plugin的另一個(gè)非常有用的目標(biāo)是attach-artifact,使用該目標(biāo)你可以以classifier的形式選取部分項(xiàng)目文件生成附屬構(gòu)件,并同時(shí)install到本地倉(cāng)庫(kù),也可以deploy到遠(yuǎn)程倉(cāng)庫(kù)。
http://mojo.codehaus.org/exec-maven-plugin/
exec-maven-plugin很好理解,顧名思義,它能讓你運(yùn)行任何本地的系統(tǒng)程序,在某些特定情況下,運(yùn)行一個(gè)Maven外部的程序可能就是最簡(jiǎn)單的問(wèn)題解決方案,這就是exec:exec的 用途,當(dāng)然,該插件還允許你配置相關(guān)的程序運(yùn)行參數(shù)。
除了exec目標(biāo)之外,exec-maven-plugin還提供了一個(gè)java目標(biāo),該目標(biāo)要求你 提供一個(gè)mainClass參數(shù),然后它能夠利用當(dāng)前項(xiàng)目的依賴作為classpath,在同一個(gè)JVM中運(yùn)行該mainClass。有時(shí)候,為了簡(jiǎn)單的 演示一個(gè)命令行Java程序,你可以在POM中配置好exec-maven-plugin的相關(guān)運(yùn)行參數(shù),然后直接在命令運(yùn)行 mvn exec:java以查看運(yùn)行效果。
http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin
在進(jìn)行Web開(kāi)發(fā)的時(shí)候,打開(kāi)瀏覽器對(duì)應(yīng)用進(jìn)行手動(dòng)的測(cè)試幾乎是無(wú)法避免的,這種測(cè)試方法通常就是將項(xiàng)目打包成war文件,然后部署到Web容器 中,再啟動(dòng)容器進(jìn)行驗(yàn)證,這顯然十分耗時(shí)。
為了幫助開(kāi)發(fā)者節(jié)省時(shí)間,jetty-maven-plugin應(yīng)運(yùn)而生,它完全兼容 Maven項(xiàng)目的目錄結(jié)構(gòu),能夠周期性地檢查源文件,一旦發(fā)現(xiàn)變更后自動(dòng)更新到內(nèi)置的Jetty Web容器中。
做一些基本配置后(例如Web應(yīng)用的contextPath和自動(dòng)掃描變更的時(shí)間間隔),你只要執(zhí)行 mvn jetty:run,然后在IDE中修改代碼,代碼經(jīng)IDE自動(dòng)編譯后產(chǎn)生變更,再由jetty-maven-plugin偵測(cè)到后更新至Jetty容器,這時(shí)你就可以直接 測(cè)試Web頁(yè)面了。
需要注意的是,jetty-maven-plugin并不是宿主于Apache或Codehaus的官方插件,因此使用的時(shí)候需要額外 的配置settings.xml
的pluginGroups元素,將org.mortbay.jetty這個(gè)pluginGroup加入。
http://mojo.codehaus.org/versions-maven-plugin/
很多Maven用戶遇到過(guò)這樣一個(gè)問(wèn)題,當(dāng)項(xiàng)目包含大量模塊的時(shí)候,為他們集體更新版本就變成一件煩人的事情,到底有沒(méi)有自動(dòng)化工具能幫助完成這件 事情呢?(當(dāng)然你可以使用sed之類的文本操作工具,不過(guò)不在本文討論范圍)答案是肯定的,versions-maven- plugin提供了很多目標(biāo)幫助你管理Maven項(xiàng)目的各種版本信息。
例如最常用的,命令 mvn versions:set -DnewVersion=1.1-SNAPSHOT就能幫助你把所有模塊的版本更新到1.1-SNAPSHOT。該插件還提供了其他一些很有用的目標(biāo),display-dependency- updates能告訴你項(xiàng)目依賴有哪些可用的更新;類似的display-plugin-updates能告訴你可用的插件更新;然后use- latest-versions能自動(dòng)幫你將所有依賴升級(jí)到最新版本。最后,如果你對(duì)所做的更改滿意,則可以使用 mvn versions:commit提交,不滿意的話也可以使用 mvn versions:revert進(jìn)行撤銷。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“常用Maven插件有哪些”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!