程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 初學maven(5)-使用assembly plugin實現自定義打包

初學maven(5)-使用assembly plugin實現自定義打包

編輯:關於JAVA

在上一篇文章中,討論到在對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>
           <!--notappendassemblyidinreleasefilename-->
           <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內容如下:

<assemblyxmlns="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.0http://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還是很強大的,繼續學習......

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved