Maven實戰(七)——常用Maven插件介紹(上)

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

用戶可以通過兩種方式調用Maven插件目標。第一種方式是將插件目標與生命周期階段(lifecycle phase)綁定,這樣用戶在命令行只是輸入生命周期階段而已,例如Maven默認將maven-compiler-plugin的compile目標與compile生命周期階段綁定,因此命令mvn compile實際上是先定位到compile這一生命周期階段,然后再根據綁定關系調用maven-compiler-plugin的compile目標。第二種方式是直接在命令行指定要執行的插件目標,例如mvn archetype:generate?就表示調用maven-archetype-plugin的generate目標,這種帶冒號的調用方式與生命周期無關。

認識上述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-antrun-plugin

http://maven.apache.org/plugins/maven-antrun-plugin/

maven-antrun-plugin能讓用戶在Maven項目中運行Ant任務。用戶可以直接在該插件的配置以Ant的方式編寫Target,然后交給該插件的run目標去執行。在一些由Ant往Maven遷移的項目中,該插件尤其有用。此外當你發現需要編寫一些自定義程度很高的任務,同時又覺得Maven不夠靈活時,也可以以Ant的方式實現之。maven-antrun-plugin的run目標通常與生命周期綁定運行。

maven-archetype-plugin

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,幫助他們快速上手。

maven-assembly-plugin

http://maven.apache.org/plugins/maven-assembly-plugin/

maven-assembly-plugin的用途是制作項目分發包,該分發包可能包含了項目的可執行文件、源代碼、readme、平臺腳本等等。maven-assembly-plugin支持各種主流的格式如zip、tar.gz、jar和war等,具體打包哪些文件是高度可控的,例如用戶可以按文件級別的粒度、文件集級別的粒度、模塊級別的粒度、以及依賴級別的粒度控制打包,此外,包含和排除配置也是支持的。maven-assembly-plugin要求用戶使用一個名為assembly.xml的元數據文件來表述打包,它的single目標可以直接在命令行調用,也可以被綁定至生命周期。

maven-dependency-plugin

http://maven.apache.org/plugins/maven-dependency-plugin/

maven-dependency-plugin最大的用途是幫助分析項目依賴,dependency:list能夠列出項目最終解析到的依賴列表,dependency:tree能進一步的描繪項目依賴樹,dependency:analyze可以告訴你項目依賴潛在的問題,如果你有直接使用到的卻未聲明的依賴,該目標就會發出警告。maven-dependency-plugin還有很多目標幫助你操作依賴文件,例如dependency:copy-dependencies能將項目依賴從本地Maven倉庫復制到某個特定的文件夾下面。

maven-enforcer-plugin

http://maven.apache.org/plugins/maven-enforcer-plugin/

在一個稍大一點的組織或團隊中,你無法保證所有成員都熟悉Maven,那他們做一些比較愚蠢的事情就會變得很正常,例如給項目引入了外部的SNAPSHOT依賴而導致構建不穩定,使用了一個與大家不一致的Maven版本而經常抱怨構建出現詭異問題。maven-enforcer-plugin能夠幫助你避免之類問題,它允許你創建一系列規則強制大家遵守,包括設定Java版本、設定Maven版本、禁止某些依賴、禁止SNAPSHOT依賴。只要在一個父POM配置規則,然后讓大家繼承,當規則遭到破壞的時候,Maven就會報錯。除了標準的規則之外,你還可以擴展該插件,編寫自己的規則。maven-enforcer-plugin的enforce目標負責檢查規則,它默認綁定到生命周期的validate階段。

maven-help-plugin

http://maven.apache.org/plugins/maven-help-plugin/

maven-help-plugin是一個小巧的輔助工具,最簡單的help:system可以打印所有可用的環境變量和Java系統屬性。help:effective-pomhelp: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。

maven-release-plugin

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的各種目標通常直接在命令行調用,因為版本發布顯然不是日常構建生命周期的一部分。

轉載于:https://www.cnblogs.com/chenying99/archive/2012/06/22/2558630.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377413.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377413.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377413.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【設計模式之美】<Reading Notes>抽象類與接口

抽象類特性 1、抽象類不允許被實例化,只能被繼承。 2、抽象類可以包含屬性和方法。方法既可以包含代碼實現,也可以不包含代碼實現。不包含代碼實現的方法叫做抽象方法。 3、子類繼承抽象類,必須實現抽象類中的所有抽象方法。 接口特性 1、…

多線程之間共享數據的實現

1:如果每個線程執行的代碼相同,可以使用同一個Runnable對象,然后將共享的數據放在Runnable里面,來實現數據的共享。 例如買票系統... package com.cn.gbx;import java.util.Date; import java.util.Random; import java.util.Time…

AIX的完整形式是什么?

AIX:高級交互式主管 (AIX: Advanced Interactive Executive) AIX is an abbreviation of "Advanced Interactive Executive". AIX是“ Advanced Interactive Executive”的縮寫 。 It is a progression sequence of proprietary UNIX operating systems …

c#生成隨機字符串 用做批量申請賬號時的隨機密碼還是相當不錯的

//隨機字符串生成器的主要功能如下: //1、支持自定義字符串長度 //2、支持自定義是否包含數字 //3、支持自定義是否包含小寫字母 //4、支持自定義是否包含大寫字母 //5、支持自定義是否包含特殊符號 //6、支持自定義字符…

【C++基礎】C++11的noexcept聲明符 與 異常傳播

目錄C noexcept:1、用途2、用法1、noexcept聲明符的用法:2、noexcept運算符的用法異常傳播1、異常傳播的定義2、異常傳播中的規則3、異常傳播的代價C noexcept: 1、用途 C11使用noexcept指明函數是否拋出異常: 若函數不拋異常&a…

使用IndexReader.repen提高搜索速度

1,使用indexreader創建indexsearcher. 2,indexsearcher在使用完了以后不要關閉. 3.使用indexreader.isCurrent()判斷索引是否被indexwriter改動. 4,如果索引被改動,indexsearcher.close()先前那個,然后new indexsearcher(indexreader). 傳string給searcher,searcher會維護一個內…

CSS中的文本格式

CSS文字格式 (CSS text formatting) CSS text properties allow you to style your text in various ways very easily. Such as color, alignment, spacing, direction, etc. CSS文本屬性使您可以輕松地以各種方式設置文本樣式。 例如顏色 , 對齊方式 ,…

【C++基礎】重拋異常與異常的使用場景

重拋異常 異常處理程序可以重新拋出異常。 當它無法處理該異常,或想通知它的調用者發生了一個異常,此時就需要重拋異常: 1、拋出捕獲的異常 try {// statements; } catch (TheException &ex) {// Do something;throw; }2、重新拋出另一…

vi @-function

vi 的功能 vi 是一個越用越強大的東西 功能: 例: 1 在插入模式 cwgadfly CTL-V ESC 看到的似: cwgadfly^[ 2 保存到g緩沖區 ESC :退出插入模式 "gdd :"g 指緩沖去個 dd刪除一行 這樣g緩沖去的內容是 cwgadflayESC 3 test love u 在…

CSS簡寫指南

1.margin 1.1 margin:1px 2px 3px(上 左右 下) 1.2 margin:2px 3px(上下 左右) 1.2 margin:1px 3px 2px 3px(上右下左) 2.padding(同上) 3.border border:1px red solid (border-width border-color border-style) 1 2 3border-width:1px 2px 3px; //最多可用四個值…

【C++基礎】模板基礎與函數模板

目錄初識模板函數模板函數模板實例化顯式實例化隱式實例化初識模板 求兩個int、float、char類型的數據的最大值: C里面要這樣寫: int maxInt(int x, int y); double maxDouble(double x, double y); char maxChar(char x, char y);C使用函數重載&#…

scala 函數中嵌套函數_Scala合成函數

scala 函數中嵌套函數Scala中的合成功能 (Composition function in Scala) Scala composition function is a way in which functions are composed in program i.e. mixing of more than one functions to extract some results. In Scala programming language, there are mu…

js--基礎

js 0為false 非0為true null為false 非null為true js 特有with(對象){}:可以確定對象所使用的范圍。for(變量 in 對象)對變量和和行為進行遍歷html xhtml xml :這些都是標記型文檔。DOM:document object model 文檔對象模型。 dom三層模型: dom1:將…

字符串的處理[C#]

//string Str1 "友情相逢"; //string Str2 "用一生愛你"; //#region char的使用 //char a a; //Console.WriteLine("IsLetter方法判斷a是否為字母:{0}", Char.IsLetter(a)); …

CentOS安全設置

CentOS安全設置 刪除多余的用戶和用戶組,修改口令文件屬性,禁止[CtrlAltDelete]重啟命令,防止別人ping的方法。整理自互聯網。1、刪除多余的用戶和用戶組//刪除多余用戶# vi /etc/passwduserdel admuserdel lpuserdel syncuserdel shutdownus…

【設計模式之美】<Reading Notes>繼承與組合

繼承缺點 繼承是面向對象的四大特性之一,用來表示類之間的 is-a 關系,可以解決代碼復用的問題。雖然繼承有諸多作用,但繼承層次過深、過復雜,也會影響到代碼的可維護性。在這種情況下,我們應該盡量少用,甚至…

scala中何時使用下劃線_在Scala中使用下劃線

scala中何時使用下劃線Underscore (_) character is reserved in Scala and has multiple usages in the programming language. Based on functions that use the underscore have the following usages: 下劃線(_)字符在Scala中保留,并且在編程語言中有多種用法。…

如何利用C#編寫網頁投票器程序 如何使用代理來投票 代理IP來投票

一、前言看個圖,了解下投票的過程。提交投票信息投票頁 ――――――――>投票信息處理頁反饋投票結果(請求頁)<―――――――(響應頁)一般情況下,填寫投票信息,然后點提交按鈕發送到響應頁,這…

【設計模式之美】<Reading Notes>貧血模型與充血模型

小知識 需要了解的一些名詞 1、領域驅動設計(Domain Driven Design,簡稱 DDD) 2、MVC 三層架構 : M 表示 Model,V 表示 View,C 表示 Controller。 它將整個項目分為三層:展示層、邏輯層、數據層…

TAFE的完整形式是什么?

TAFE:拖拉機和農用設備 (TAFE: Tractors and Farm Equipment) TAFE is an abbreviation of Tractors and Farm Equipment Limited. It is an Indian tractor manufacturer which is founded at Chennai in 1960. It is the second-largest tractor manufacturer in …