1. 程式人生 > >Maven幾個常用的maven外掛

Maven幾個常用的maven外掛

簡介

    我們使用maven做一些日常的工作開發的時候,無非是想利用這個工具帶來的一些便利。比如它帶來的依賴管理,方便我們打包和部署執行。這裡幾個常見的外掛就是和這些工程中常用的步驟相關。

maven-compile-plugin

    這個外掛就如同名字所顯示的這樣,用來編譯原始碼的。最開始碰到這個外掛是在於有的時候我們下載了一些工程需要編譯的時候,比如我們輸入命令:mvn install ,但是系統編譯的時候報錯了,錯誤的資訊如下:

Shell程式碼  收藏程式碼
  1. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.0
    .2:compile (default-compile) on project springJMS: Compilation failure: Compilation failure:  
  2. [ERROR] /home/frank/programcode/SpringJMSSample/src/main/java/huangbowen/net/jms/MessageSender.java:[6,1] error: annotations are not supported in -source 1.3  
  3. [ERROR]   
  4. [ERROR] (use -source 5 or higher to enable annotations)  
  5. [ERROR] /home/frank/programcode/SpringJMSSample/src/main/java/net/EmbedBrokerApp.java:[5,7] error: static import declarations are not supported in -source 1.3  
  6. [ERROR] -> [Help 1]  
  7. [ERROR]   
  8. [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.  
  9. [ERROR] Re-run Maven using the -X switch to enable full debug logging.  
  10. [ERROR]   
  11. [ERROR] For more information about the errors and possible solutions, please read the following articles:  
  12. [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException  

    從錯誤顯示的資訊我們就可以看出,這是因為編譯的時候是預設用的javac 1.3版本的,太老了不支援程式碼裡的特性。為了修改這個問題,我們需要設定編譯器的版本。解決這個問題的辦法也比較簡單,就是直接在後面的外掛部分增加如下的外掛,比如如下部分,將編譯器的版本設定為1.6:

Xml程式碼  收藏程式碼
  1. <build>  
  2.       <plugins>  
  3.         <plugin>  
  4.             <groupId>org.apache.maven.plugins</groupId>  
  5.             <artifactId>maven-compiler-plugin</artifactId>  
  6.             <version>2.3.2</version>  
  7.             <configuration>  
  8.                 <source>1.6</source>  
  9.                 <target>1.6</target>  
  10.             </configuration>  
  11.         </plugin>  
  12.       </plugins>  
  13.     </build>  

exec-maven-plugin

    我們寫一些java console相關的程式時,比較頭疼的一點就是真正要通過命令列將打包後的程式執行起來還是比較麻煩的。我們需要在命令列裡敲如下的命令:java -cp ***.jar:**.jar:/**/ 。因為要將classpath目錄以及引用的類庫都加入進來,並指定執行的入口,這樣子每次用手工的方式來處理實在是太繁瑣也比較容易出錯。所以一種辦法就是利用這個外掛,通過一些基本的配置,我們可以執行起程式碼來的時候很方便。一個典型的配置如下:

Xml程式碼  收藏程式碼
  1. <plugin>  
  2.               <groupId>org.codehaus.mojo</groupId>  
  3.               <artifactId>exec-maven-plugin</artifactId>  
  4.               <version>1.2.1</version>  
  5.               <executions>  
  6.                 <execution>  
  7.                   <goals>  
  8.                     <goal>java</goal>  
  9.                   </goals>  
  10.                 </execution>  
  11.               </executions>  
  12.               <configuration>  
  13.                 <mainClass>com.yunzero.App</mainClass>  
  14.               </configuration>  
  15.             </plugin>  

   如果我們執行的時候需要提供一些輸入的引數,也可以通過configuration的元素裡新增。這樣後續要執行這個程式時,我們只需要在命令列執行如下命令:mvn exec:java ,然後程式就可以執行起來了。

maven-dependency-plugin

  還有一個比較常用的外掛就是這個。我們在IDE的環境裡編譯和執行程式碼的時候,那是直接引用一些類庫。但是在我們實際部署的環境裡,那邊很可能就一個java執行環境,不可能有原始碼和IDE。這個時候,我們需要將原始碼編譯打包。這個時候的一個問題就是如果我們引用的庫很多的話,我們希望能夠把他們統一打包到一個目錄下,比如lib資料夾。這樣部署執行的時候只需要將編譯生成的程式jar包和依賴包資料夾拷到特定目錄去執行。要實現這個效果也比較容易:

Xml程式碼  收藏程式碼
  1. <plugin>   
  2.     <artifactId>maven-dependency-plugin</artifactId>   
  3.         <executions>   
  4.         <execution>   
  5.             <phase>install</phase>   
  6.             <goals>   
  7.                 <goal>copy-dependencies</goal>   
  8.             </goals>   
  9.             <configuration>   
  10.                 <outputDirectory>${project.build.directory}/lib</outputDirectory>   
  11.             </configuration>   
  12.         </execution>   
  13.     </executions>   
  14. </plugin>  

     從前面的配置裡我們可以看到,外掛的執行被配置到install這個階段。這樣,當我們執行命令:mvn clean install 的時候,會發現對應的target目錄裡生成了對應的jar包和依賴包。

另一篇: 

參考資料:http://my.oschina.net/zh119893/blog/276090 

我們都知道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.codehaus.mojo,這裡的外掛沒有那麼核心,但也有不少十分有用,其地址為:http://mojo.codehaus.org/plugins.html

接下來介紹一些常用的MAVEN外掛

maven-antrun-plugin

maven-antrun-plugin能讓使用者在Maven專案中執行Ant任務。使用者可以直接在該外掛的配置以Ant的方式編寫Target,然後交給該外掛的run目標去執行。

在一些由Ant往Maven遷移的專案中,該外掛尤其有用。

此外當你發現需要編寫一些自定義程度很高的任務,同時又覺得Maven不夠靈活時,也可以以Ant的方式實現之。maven-antrun-plugin的run目標通常與生命週期繫結執行。

maven-archetype-plugin

Archtype指專案的骨架,Maven初學者最開始執行的Maven命令可能就是mvn archetype:generate,這實際上就是讓maven-archetype-plugin生成一個很簡單的專案骨架,幫助開發者快速上手。

可能也有人看到一些文件寫了mvn archetype:create,但實際上create目標已經被棄用了,取而代之的是generate目標,該目標使用互動式的方式提示使用者輸入必要的資訊以建立專案,體驗更好。

maven-archetype-plugin還有一些其他目標幫助使用者自己定義專案原型,例如你由一個產品需要交付給很多客戶進行二次開發,你就可以為他們提供一個Archtype,幫助他們快速上手。

maven-assembly-plugin

maven-assembly-plugin的用途是製作專案分發包,該分發包可能包含了專案的可執行檔案、原始碼、readme、平臺指令碼等等。

maven-assembly-plugin支援各種主流的格式如zip、tar.gz、jar和war等,具體打包哪些檔案是高度可控的。

例如使用者可以按檔案級別的粒度、檔案集級別的粒度、模組級別的粒度、以及依賴級別的粒度控制打包,此外,包含和排除配置也是支援的。

maven-assembly-plugin要求使用者使用一個名為assembly.xml的元資料檔案來表述打包,它的single目標可以直接在命令列呼叫,也可以被繫結至生命週期。

maven-dependency-plugin

maven-dependency-plugin最大的用途是幫助分析專案依賴

dependency:list能夠列出專案最終解析到的依賴列表

dependency:tree能進一步的描繪專案依賴樹

dependency:analyze可以告訴你專案依賴潛在的問題

如果你有直接使用到的卻未宣告的依賴,該目標就會發出警告。

maven-dependency-plugin還有很多目標幫助你操作依賴檔案,例如dependency:copy-dependencies能將專案依賴從本地Maven倉庫複製到某個特定的資料夾下面。

maven-enforcer-plugin

在一個稍大一點的組織或團隊中,你無法保證所有成員都熟悉Maven,那他們做一些比較愚蠢的事情就會變得很正常。

例如給專案引入了外部的SNAPSHOT依賴而導致構建不穩定,使用了一個與大家不一致的Maven版本而經常抱怨構建出現詭異問題。

maven-enforcer-plugin能夠幫助你避免之類問題,它允許你建立一系列規則強制大家遵守,包括設定Java版本、設定Maven版本、禁止某些依賴、禁止SNAPSHOT依賴。

只要在一個父POM配置規則,然後讓大家繼承,當規則遭到破壞的時候,Maven就會報錯。

除了標準的規則之外,你還可以擴充套件該外掛,編寫自己的規則。maven-enforcer-plugin的enforce目標負責檢查規則,它預設繫結到生命週期的validate階段。

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。

maven-release-plugin

maven-release-plugin的用途是幫助自動化專案版本釋出,它依賴於POM中的SCM資訊。

release:prepare用來準備版本釋出,具體的工作包括檢查是否有未提交程式碼、檢查是否有SNAPSHOT依賴、升級專案的SNAPSHOT版本至RELEASE版本、為專案打標籤等等。

release:perform則是簽出標籤中的RELEASE原始碼,構建併發布。版本釋出是非常瑣碎的工作,它涉及了各種檢查,而且由於該工作僅僅是偶爾需要,因此手動操作很容易遺漏一些細節。

maven-release-plugin讓該工作變得非常快速簡便,不易出錯。maven-release-plugin的各種目標通常直接在命令列呼叫,因為版本釋出顯然不是日常構建生命週期的一部分。

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傳入屬性的值,以實現更為靈活的構建。

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引數實現的。

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

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

在進行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

很多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外掛也不是難事,更何況還有這麼多開放原始碼的外掛供你參考。

一些常見例子

① maven-jetty-plugin 

http://blog.sina.com.cn/s/blog_62b0363101012he0.html

http://stamen.iteye.com/blog/1933452

輸入:mvn jetty:run。這將在埠為8080的Jetty伺服器上啟動你的專案。Jetty將持續執行,直到外掛是明確停止。例如,按下<ctrl-c>,或使用mvn jetty:stop命令。

複製程式碼
    <build>
        <finalName>rop-sample</finalName>
        <plugins>
            <!--
            
           

相關推薦

Maven的Pom.xml裡面常用plugin外掛使用,很實用!!!

maven-compiler-plugin編譯Java原始碼,一般只需設定編譯的jdk版本<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compile

Maven常用maven外掛

簡介     我們使用maven做一些日常的工作開發的時候,無非是想利用這個工具帶來的一些便利。比如它帶來的依賴管理,方便我們打包和部署執行。這裡幾個常見的外掛就是和這些工程中常用的步驟相關。 maven-compile-plugin     這

maven學習總結:常用maven外掛

我們使用maven做一些日常的工作開發的時候,無非是想利用這個工具帶來的一些便利。比如它帶來的依賴管理,方便我們打包和部署執行。這裡幾個常見的外掛就是和這些工程中常用的步驟相關。 maven-compile-plugin     這個外掛就如同名字所顯示的這樣,用來編譯原始碼的。最開始碰到這個外掛是在於有

Maven常用plugin

implement put rom crawl logs delete raw lse efi 出自:https://www.cnblogs.com/zhangxh20/p/6298062.html maven-compiler-plugin 編譯Java源碼,一般只需

關於maven常用的配置檔案

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ma

maven 命令的用法

spring 測試 目錄 === lean workspace 生成 test 項目 進入到項目目 前 cd E:\workspace\foen_api(如切換不了目錄) 直接E:\workspace\foen_api mvn clean 清理 mvn install 安

30 常用 Maven 命令

maven 命令除了常用的幾個,大部分經常記不住,整理一下,方便查詢。 maven 命令的格式為 mvn [plugin-name]:[goal-name],可以接受的引數如下, -D 指定引數,如 -Dmaven.test.skip=true 跳過單元測試; -P 指定 P

關於eclipse下開發android應用的常用外掛

  1.adt外掛 https://dl-ssl.google.com/android/eclipse/    這肯定是不能少了的.有這個外掛,其實是將eclipse打造成了一個高階的android應用開發IDE,必要性可想而知.     2.egit外掛 http://d

Mybatis-generator常用內建外掛

Plugin能夠用來在MyBatis Generator生成Java和XML檔案過程中修改或者新增內容;Plugin必須實現org.mybatis.generator.api.Plugin介面,在這個介面中提供了非常多的方法,所以,很自然,MBG提供了一個介面卡

Jquery select2外掛常用方法

1、準備 首先引入jquery,然後引入select2的css樣式檔案與js指令碼檔案 2、常用方法 $('select選擇器').select2(); // 呼叫select2方法 $('select選擇器').val('val'); // 初始賦值 $('selec

vsCode工具做react開發,常用外掛

1、vscode-fileheader 新增檔案頭 2、reactjs code snippets react 開發的一些簡寫,提高開發效率 3、Path Autocomplete 路徑提示功能 4、git blame 安裝git後, git bl

PHP執行系統命令的有常用的函數

exe 自動 文件操作 nal 外部命令 中間 ring 打開 lcm PHP執行系統命令的有幾個常用的函數,如有:system函數、exec函數、popen函數,passthru,shell_exec函數他們都可以執行系統命令,不過前提時必須系統給了權限了哦。 syste

miniui常用知識點匯總

簡單 去除 spa 自帶 超過 表格 繪制 val wro 1.在表格中去除系統自帶的序列號,請看代碼: function allAndBrief(id) { if(id==1){ grid.set({

hadoop的常用命令

hadoop官方文檔:http://hadoop.apache.org/docs/r1.2.1/file_system_shell.html1、登錄主節點,切換到hdfs用戶[[email protected]/* */~]#su - hdfs2、列出當前目錄有哪些子目錄,有哪些文件[[email

封裝對象,包含常用方法

nts opp 操作 阻止事件冒泡 3.1 坐標 stop pre 處理 這兩天復習了DOM事件綁定,記錄一下,便於復習學習。 1 事件處理程序  1.1 HTML事件處理程序:直接寫在html中,和html不解耦,修改麻煩  1.2 DOM0級事件處理程序:不寫在html

Python:print()函數的常用參數

com file open 默認 strong 其他 end 空格 文件的 1.參數sep:設置輸出字符產之間的字符串。默認是空格 1 name=‘Tomwenxing‘ 2 age=‘23‘ 3 job=‘student‘ 4 print(name,age,job) 5

請求網頁常用庫的用法:

完成 data report 第三方庫 () .get 參數說明 進度 函數 1、urllib urlopen()方法urllib.urlopen(url[, data[, proxies]]) :創建一個表示遠程url的類文件對象,然後像本地文件一樣操作這個類文件對

常用網絡/服務器監控開源軟件

memcached 托管 不能 不足 div ios系統 正在 linux下 tle 想要更清晰的了解你的網絡嗎?沒有比這幾個免費的工具更好用的了。 網絡和系統監控是一個很寬的範疇。有監控服務器、網絡設備、應用正常工作的方案,也有跟蹤這些系統和設備性能,提供趨勢性能分

Python的常用模塊

comm line 時間 sdi make 常用模塊 常用 一級目錄 就會 一、sys 用於提供對Python解釋器相關的操作: sys.argv 命令行參數List,第一個元素是程序本身路徑 sys.exit(n) 退出程序,正常退

常用規則引擎的簡單介紹和演示

規則引擎 drools ilog odm Ilog JRules 是最有名的商用BRMS;Drools 是最活躍的開源規則引擎;Jess 是Clips的java實現,就如JRuby之於Ruby,是AI系的代表;Visual Rules(旗正規則引擎)國內商業規則引擎品牌。今天對比了一下這四個頗