Dubbo的Maven打包


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

Maven實戰(九)——打包的技巧
http://www.infoq.com/cn/news/2011/06/xxb-maven-9-package


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM