使用assembly plugin實現自定義打包

  在上一篇文章中,討論到在對maven的機制不熟悉的狀況下,爲了實現本身須要的打包格式而使用maven ant task以maven + ant的方式來實現非標準打包,而如今要介紹的是maven中針對打包任務而提供的標準插件:assembly plugin。

    依然以上文(初學maven(4)-使用maven ant task實現非標準打包)的項目爲例,要打包的程序以下:

    demo1
    |____lib
    |_____demo1.jar
    |_____*****.jar
    |_____*****.jar
    |____config
    |_____*****.properties
    |_____*****.xml
    |____log
    |_____*****.log
    |____run.bat
    |____run.sh

    相似的創建java項目,文件結構以下:

    demo1
    |____src/main/java
    |____src/main/config
    |____src/main/bin
    |____src/main/resources
    |____src/main/assemble
    |____src/test/java
    |____src/test/resources
    |____target
    |____pom.xml

    除開增長了src/main/assemble目錄和沒有ant的build文件外,其餘內容徹底同樣:其中src/main/java下放java代 碼;src/main/resources下放一個*.properties文件,這個資源文件是打包到 jar中,內容打包以後不須要改變的。src/main/config下放一個標準的log4j.xml,這個是有在安裝運行前臨時修改的須要的。src /main/bin下放置可執行文件。

    assembly plugin的使用方式比較簡單,主要有:

1. 修改pom.xml

    pom.xml中設置以下:
   
< build >
        
< plugins >
            
< plugin >
                
< artifactId > maven-assembly-plugin </ artifactId >
                
< configuration >
                    
<!--  not append assembly id in release file name  -->
                    
< appendAssemblyId > false </ appendAssemblyId >
                    
< descriptors >
                        
< descriptor > src/main/assemble/package.xml </ descriptor >
                    
</ descriptors >
                
</ configuration >
                
< executions >
                    
< execution >
                        
< id > make-assembly </ id >
                        
< phase > package </ phase >
                        
< goals >
                           
< goal > single </ goal >
                        
</ goals >
                    
</ execution >
                
</ executions >
            
</ plugin >
        
</ plugins >
    
</ build >

    其中<artifactId>maven-assembly-plugin</artifactId>的maven-assembly-plugin是這個插件的標準命名,在maven2.0.*中帶的默認版本是

    appendAssemblyId屬性控制是否在生成的打包文件的文件名中包含assembly id。
   
    descriptor屬性指定maven-assembly-plugin的配置文件,固然我設置的是src/main/assemble/package.xml.允許使用多個,功能強大固然用法也複雜,對於簡單狀況一個足矣。

    execution的設置是爲了將maven-assembly-plugin繼承到標準的maven打包過程當中,這樣在運行maven-package時就會執行maven-assembly-plugin的操做,從而實現咱們須要的自定義打包。
2. assemble descriptor file

    個人src/main/assemble/package.xml內容以下:

< assembly  xmlns ="http://maven.apache.org/POM/4.0.0"  xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/assembly-1.0.0.xsd" >
    
< id > package </ id >
    
< formats >
        
< format > zip </ format >
    
</ formats >
    
< includeBaseDirectory > true </ includeBaseDirectory >
    
< fileSets >
        
< fileSet >
            
< directory > src/main/bin </ directory >
            
< outputDirectory > / </ outputDirectory >
        
</ fileSet >
        
< fileSet >
            
< directory > src/main/config </ directory >
            
< outputDirectory > config </ outputDirectory >
        
</ fileSet >
    
</ fileSets >
    
< dependencySets >
        
< dependencySet >
            
< outputDirectory > lib </ outputDirectory >
            
< scope > runtime </ scope >
        
</ dependencySet >
    
</ dependencySets >
</ assembly >

   
    詳細的語法不介紹了,請參考官方指南,有很是詳盡的說明: Assembly Descriptor Format reference

    簡單解釋一下:

    1) format
    format=zip設置打包的最終文件格式爲zip.
    支持的其餘格式還有gz,tar,tar.gz,tar.bz2。

    2)  fileset
   
     < fileSet >
            
< directory > src/main/bin </ directory >
            
< outputDirectory > / </ outputDirectory >
    
</ fileSet >  
 
    將src/main/bin目錄下的文件打包到根目錄(/)下.

< fileSet >
            
< directory > src/main/config </ directory >
            
< outputDirectory > config </ outputDirectory >
</ fileSet >

    將src/main/config目錄下的文件打包到config下.

    3) dependencySets

     < dependencySet >
            
< outputDirectory > lib </ outputDirectory >
            
< scope > runtime </ scope >
   
</ dependencySet >
    將scope爲runtime的依賴包打包到lib目錄下。     總結一下,pom.xml中引入maven-assembly-plugin,而後assemble descriptor file按需設置,最後在eclipse中執行Run As -> Maven package,在target目錄下就會出現***.zip文件,裏面的格式和要求的徹底一致。     夠簡單明瞭吧?感受比使用maven ant task要輕快很多,看來maven仍是很強大的,繼續學習......
相關文章
相關標籤/搜索