自定義Maven Package 類型

 問題提出

 

pom.xml中的<packaging>是該項目的打包方式,Maven預設的幾種打包方式分別是:

jar/war/ejb/ejb3/rar;打包方式會與Lifecycle做一個綁定,mvn會根據打包的類型來調用不同的插件來完成打包的工作。

    比如jar包就會調用maven-jar-plugin的jar任務來打包,war會調用war:war來完成打包

幾種默認的Lifecycle綁定(ejb/jar/rar/war):

 

process-resources   resources:resources
compile compiler:compile
process-test-resources  resources:testResource
test-compile compiler:testCompiler
package ejb:ejb jar:jar rar:rar war:war
install install:install
deploy 

 deploy:deploy


 

 

    但是,我需要自己定義一種打包方式,car包,這種方式是war包的一箇中間階段,這種包除了不包含WEB-INF/lib和web.xml外和war包格式一樣的。

     幾個不同的car可以合併成爲同一個war包,這樣就可以解決在一個ear包中,導致同一個jar在不同的war中反覆被引用的情況。


 

Maven中自定義Package 類型並綁定Lifecyle的過程是:

 

  1. 創建一個Maven 插件工程,package 類型爲maven-plugin
  2. 請參照《Maven Definitive》的關於自定義插件的章節,定義自定義插件的Mojo Goal。
  3. 在src/main/resources 的目錄下,創建文件夾 META-INF/plexus,並在該文件夾下加入文件 components.xml。
  4. components.xml向Maven的內在容器Plexus Container描述了插件的基本信息。這裏有一個Sample,來自maven-magma-plugin的components.xml. 
  5. 在這個文件中,將magma替換爲你自定義的打包類型。
  6. 將你自己寫的插件deploy到Repository中,如果要引用自定義打包類型。pom.xml文件需要注意的地方是:

            packaging應該自定義的打包類型的名字。

         而在plugin的配置的時候,要將extensions設置爲true,比如:

<plugin>
    <groupId>org.apache.magma.tools</groupId>     
    <artifactId>maven-magma-plugin</artifactId>
    <extensions>true</extensions>
 </plugin>

感謝[email protected]的熱情幫助解決我的問題,請大家有關於Maven問題在users@maven.apache.org中提出,這裏有很多的熱心人。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章