日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

assembly plugin实现自定义打包

發布時間:2024/4/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中設置如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><?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內容如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><?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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->?????<?fileSet?>?
?????????????<?directory?>?src/main/bin?</?directory?>?
?????????????<?outputDirectory?>?/?</?outputDirectory?>?
?????</?fileSet?>???

??
??? 將src/main/bin目錄下的文件打包到根目錄(/)下.

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><?fileSet?>?
?????????????<?directory?>?src/main/config?</?directory?>?
?????????????<?outputDirectory?>?config?</?outputDirectory?>?
</?fileSet?>


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

??? 3) dependencySets

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->?????<?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還是很強大的,繼續學習......




===========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
  • <plugin>??
  • ????????????????<artifactId>maven-jar-plugin</artifactId>??
  • ????????????????<version>2.3.1</version>??
  • ????????????????<executions>??
  • ????????????????????<execution>??
  • ????????????????????????<id>default-jar</id>??
  • ????????????????????????<phase>package</phase>??
  • ????????????????????????<goals>??
  • ????????????????????????????<goal>jar</goal>??
  • ????????????????????????</goals>??
  • ????????????????????????<configuration>??
  • ????????????????????????????<archive>??
  • ????????????????????????????????<manifest>??
  • ????????????????????????????????????<addClasspath>true</addClasspath>??
  • ????????????????????????????????????<mainClass>com.thomsonreuters.PALFullExtractor.ExtractorMain</mainClass>??
  • ????????????????????????????????</manifest>??
  • ????????????????????????????</archive>??
  • ????????????????????????</configuration>??
  • ????????????????????</execution>??
  • ????????????????</executions>??
  • ????????????</plugin>??
  • 在上例中,指定mainClass將在manifest文件中加入mainclass,這樣jar就可以直接運行了。

    [html]?view plaincopy
  • <plugin>??
  • ????????????????<artifactId>maven-assembly-plugin</artifactId>??
  • ????????????????<version>2.2</version>??
  • ????????????????<executions>??
  • ????????????????????<execution>??
  • ????????????????????????<id>make-assembly</id>??
  • ????????????????????????<phase>package</phase>??
  • ????????????????????????<goals>??
  • ????????????????????????????<goal>single</goal>??
  • ????????????????????????</goals>??
  • ????????????????????????<configuration>??
  • ????????????????????????????<archive>??
  • ????????????????????????????????<manifest>??
  • ????????????????????????????????????<mainClass>com.thomsonreuters.PALFullExtractor.ExtractorMain</mainClass>??
  • ????????????????????????????????</manifest>??
  • ????????????????????????????</archive>??
  • ????????????????????????????<descriptorRefs>??
  • ????????????????????????????????<descriptorRef>jar-with-dependencies</descriptorRef>??
  • ????????????????????????????</descriptorRefs>??
  • ????????????????????????????<descriptors>??
  • ????????????????????????????????<descriptor>D:\projectname\src\main\assembly/assembly.xml</descriptor>??
  • ????????????????????????????</descriptors>??
  • ????????????????????????</configuration>??
  • ????????????????????</execution>??
  • ????????????????</executions>??
  • ????????????</plugin>??

  • 注意其中2點:

    1,descriptorRef -- jar-with-dependencies 就是將程序依賴的所有第三方類庫都打入jar包,這樣就不需要在運行時指定class-path了。

    2,descriptor -- 指定assembly文件所在的位置。我們還需要創建一個assembly.xml來詳細說明package的目錄結構和內容。

    assembly.xml文件的示例:

    [html]?view plaincopy
  • <assembly>??
  • ????<id>package</id>??
  • ????<formats>??
  • ????????<format>zip</format>??
  • ????</formats>??
  • ????<includeBaseDirectory>false</includeBaseDirectory>??
  • ????<fileSets>??
  • ????????<fileSet>??
  • ????????????<directory>src/main/resources/config</directory>??
  • ????????????<outputDirectory>config</outputDirectory>???
  • <!--將項目中src/main/resources/config下的內容放入packaeg的第一級config目錄中-->??
  • ????????????<includes>??
  • ????????????????<include>*.xsd</include>??
  • ????????????????<include>*.dtd</include>??
  • ????????????????<include>*.xml</include>??
  • ????????????????<include>*.properties</include>??
  • ????????????????<include>*.key</include>??
  • ????????????</includes>??
  • ????????????<lineEnding>lf</lineEnding>??
  • ????????</fileSet>??
  • ????????<fileSet>??
  • ????????????<directory>src/main/resources/script</directory>??
  • ????????????<outputDirectory></outputDirectory>??
  • ??
  • <!--將項目中src/main/resources/script下的內容放入packaeg中-->??
  • ??
  • ????????????<includes>???
  • ????????????????<include>*.ksh</include>???
  • ????????????????<include>*.cmd</include>???
  • ????????????</includes>???
  • ????????????<lineEnding>lf</lineEnding>???
  • ????????</fileSet>???
  • ????</fileSets>??
  • ????<dependencySets>???
  • ????????<dependencySet>??
  • ????????????<outputDirectory>lib</outputDirectory>??
  • ????????</dependencySet>???
  • ????</dependencySets>??
  • </assembly>??

  • 這樣打好的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实现自定义打包的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。