assembly plugin实现自定义打包
http://skydream.iteye.com/blog/437937
在上一篇文章中,討論到在對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中設置如下:
?????????<?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內容如下:
????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
?????????????<?directory?>?src/main/bin?</?directory?>?
?????????????<?outputDirectory?>?/?</?outputDirectory?>?
?????</?fileSet?>???
??
??? 將src/main/bin目錄下的文件打包到根目錄(/)下.
?????????????<?directory?>?src/main/config?</?directory?>?
?????????????<?outputDirectory?>?config?</?outputDirectory?>?
</?fileSet?>
??? 將src/main/config目錄下的文件打包到config下.
??? 3) dependencySets
?????????????<?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還是很強大的,繼續學習......
===========http://blog.csdn.net/onlyqi/article/details/8194357
在IDE中安裝了maven插件之后,就可以直接運行maven package來打包了。
如果沒有在IDE中安裝插件而是單獨安裝了maven程序,則可以在命令行中直接執行mvn package來打包。
二者沒有本質區別,本文以在IDE中直接為例。
要將項目打包,有兩種選擇:生成一個jar包;或一個包含jar包,配置文件,腳本文件等等的一個zip文件(assembly)。
如果沒有在pom中顯示的指定,則會使用默認的插件(通過查看effective pom可以看到)并按默認方式打包。
我們常用maven-jar-plugin來生成jar包。如果希望生成assembly,則除了maven-jar-plugin外,再使用插件maven-assembly-plugin來生成zip包。
[html]?view plaincopy
[html]?view plaincopy
注意其中2點:
1,descriptorRef -- jar-with-dependencies 就是將程序依賴的所有第三方類庫都打入jar包,這樣就不需要在運行時指定class-path了。
2,descriptor -- 指定assembly文件所在的位置。我們還需要創建一個assembly.xml來詳細說明package的目錄結構和內容。
assembly.xml文件的示例:
[html]?view plaincopy
這樣打好的package名叫例如:project-1_0.zip中解壓后就會得到腳本文件以及另外兩個目錄config(包含配置文件),和lib目錄(包含所有依賴的第三方類庫和projectName.jar)
我們還可以在assembly按需要構建更復雜的package結構。
從maven-jar-plugin和maven-assembly-plugin的pom文件可以看到它們都指定了:<phase>package</phase>
這會導致運行mvn package命令時運行這兩個插件。
直接搜索這兩個插件的名字可以找到maven官網中隊插件更詳細的介紹。
總結
以上是生活随笔為你收集整理的assembly plugin实现自定义打包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zookeeper 命令
- 下一篇: AXURE在原型设计中的应用