Maven項目的依賴,我們可以通過下面命令看到,打包時,會按照這個依賴編譯進去對應模塊。 參考:http://www.cnblogs.com/ghj1976/p/5336923.html
mvn dependency:tree
maven-assembly-plugin
實際的軟件項目常常會有更復雜的打包需求,例如我們可能需要為客戶提供一份產品的分發包,這個包不僅僅包含項目的字節碼文件,
還得包含依賴以及相關腳本文件以方便客戶解壓后就能運行,此外分發包還得包含一些必要的文檔。
我們就要搬出Maven最強大的打包插件:maven-assembly-plugin。它支持各種打包文件格式,包括zip、tar.gz、tar.bz2等等,
通過一個打包描述文件(該例中是src/main/assembly.xml),它能夠幫助用戶選擇具體打包哪些文件集合、依賴、模塊、和甚至本地倉庫文件,
每個項的具體打包路徑用戶也能自由控制。
以Dubbo的 dubbo-demo-provider 為例,我們在它的 pom 文件中可以看到如下插件配置:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
這里的第四行我們指定了一個assembly.xml文件,這就是對應需求的打包描述文件。
我們進去看這個文件,內容如下:
<assembly>
<id>assembly</id>
<formats>
<format>tar.gz</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}/dubbo/META-INF/assembly/bin</directory>
<outputDirectory>bin</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>src/main/assembly/conf</directory>
<outputDirectory>conf</outputDirectory>
<fileMode>0644</fileMode>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
首先這個assembly.xml文件的id對應了其最終生成文件的classifier, 這個項目最終生成的文件名為:
其次formats定義打包生成的文件格式,這里是tar.gz。因此結合id我們會得到一個名為dubbo-demo-provider-2.5.4-SNAPSHOT-assembly.tar的文件。(假設artifactId為assembly,version為2.5.4)
dependencySets用來定義選擇依賴並定義最終打包到什么目錄,這里我們聲明的一個depenencySet默認包含所有所有依賴,
而useProjectArtifact表示將項目本身生成的構件也包含在內,最終打包至輸出包內的lib路徑下(由outputDirectory指定)。
fileSets允許用戶通過文件或目錄的粒度來控制打包。這里的第一個fileSet打包${project.build.directory}/dubbo/META-INF/assembly/bin目錄下文件至輸出包的bin目錄下,第二個fileSet則將src/main/assembly/conf目錄下的文件打包至輸出包的conf目錄下。
參考資料:
maven打包dubbo接口之最佳實踐
http://www.bridgeli.cn/archives/236
http://www.infoq.com/cn/news/2011/06/xxb-maven-9-package