maven打包成jar文件與打包成tar.gz文件

一、普通main方法入口的jar程序打包 maven-jar-plugin插件與maven-jar-plugin插件

用到maven-jar-plugin插件與maven-jar-plugin插件,打包完的jar文件所依賴包沒有導包到jar文件中,管理不方便

打包命令: 

maven  -package

搭建過程:

1、目錄結構:


2、Pox.xml配置:

<build>
    <finalName>bigdata11</finalName><!--打包完成文件的名字-->
    <plugins>
        <plugin><!--maven-jar-plugin用於生成META-INF/MANIFEST.MF文件的部分內容 jar包-->
            <groupId>org.apache.maven.plugins</groupId> <!--引入maven插件的groupId-->
            <artifactId>maven-jar-plugin</artifactId> <!--引入maven插件的artifactId-->
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath><!--MANIFEST.MF 是否增加依賴包-->
                        <classpathPrefix>lib/</classpathPrefix><!--MANIFEST.MF文件 依賴包位置格式-->
                        <mainClass>proxy.demo.TestMain</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

        <plugin><!--maven-dependency-plugin插件用於將依賴包拷貝到<outputDirectory>${project.build.directory}/lib</outputDirectory>指定的位置,即lib目錄下-->
            <groupId>org.apache.maven.plugins</groupId><!--將依賴包放到物理存儲外部 li-->
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

此方式只能生成除依賴包之外的(自己寫的代碼)打包成jar文件,會在target目錄下生成jar包,並將依賴包拷貝到target/lib目錄下,目錄結構如下:



二、使用maven-assembly-plugin插件打包(與eclipse導出類似

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.5.5</version>
            <configuration>
                <!--依賴裝配 false:指的是,把依賴包跟java程序打包成一個jar文件內;true(默認):指的是,把依賴包單獨打包成一個jar文件-->
                <appendAssemblyId>false</appendAssemblyId>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                         <!--此處指定main方法入口的class-->
                        <mainClass>wc.WordCountMain</mainClass>
                    </manifest>
                </archive>
                </configuration>

            <executions>
                <execution>
                    <!--代表執行插件 不寫executions,則打包命令變成:mvn package assembly:single-->
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>assembly</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

打包命令: 

maven  -package

三、maven 打包成tar.gz文件

同樣使用assembly插件:maven-jar-plugin   maven-assembly-plugin

綜述:


1、首先pom.xml文件添加插件

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <!-- false:生成的jar中,不要包含pom.xml和pom.properties這兩個文件-->
                    <addMavenDescriptor>true</addMavenDescriptor>
                    <manifest>
                        <!--true:是否要把第三方jar放到manifest的classpath中-->
                        <addClasspath>true</addClasspath>
                        <!--生成的manifest中classpath的前綴,因爲要把第三方jar放到lib目錄下,所以classpath的前綴是lib/-->
                        <classpathPrefix>lib/</classpathPrefix>
                        <!--應用的main class-->
                        <mainClass>wc.WordCountMain</mainClass>
                    </manifest>
                </archive>
                <!--過濾掉不希望包含在jar中的文件-->
                <excludes>
                    <exclude>${project.basedir}/xml/*</exclude>
                </excludes>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId> maven-assembly-plugin </artifactId>
            <version>2.5.5</version>
            <configuration>
                <descriptors>
                    <!-- 描述文件路徑 -->
                    <descriptor>src/main/assembly/assembly.xml</descriptor>
                </descriptors>
                <archive>
                    <manifest>
                        <mainClass>wc.WordCountMain</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <!--名字任意 -->
                    <id>make-assembly</id>
                    <!-- 綁定到package生命週期階段上 -->
                    <phase>package</phase>
                    <goals>
                        <!-- 只運行一次 -->
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2、描述文件(src\main\assemble\assembly.xml)

<assembly>
    <id>release</id><!--名字  會附加在版本後面-->
    <formats>
        <format>tar.gz</format><!--打包格式-->
    </formats>
    <!--如果爲false,不會額外產生根目錄,否則,在tar.gz包中會產生以pom.xml中artifactId和version命名的根目錄-->
    <includeBaseDirectory>true</includeBaseDirectory>
    <!--是對依賴包的設置-->
    <dependencySets>
        <!--assembly中dependencySets的意思就是,將scope爲runtime的依賴包,放到AlarmReport/lib目錄下-->
        <dependencySet>
            <!--定義了是否解壓依賴包,如果爲true,會解壓出依賴包中的class文件,反之,則不進行解壓-->
            <unpack>false</unpack>
            <!--限定了對哪些依賴包進行操作;(依賴包scope的值是在pom.xml中定義的)-->
            <scope>runtime</scope>
           <!-- 依賴包在tar.gz包中相對於根目錄的路徑-->
            <outputDirectory>lib</outputDirectory>
            <!--依賴包中是否包含當前工程-->
            <useProjectArtifact>true</useProjectArtifact>
        </dependencySet>
    </dependencySets>
    <!--指定哪些文件包含在打出的tar.gz包中-->
    <!--assembly中兩個fileSets的作用是,
    將target/classes下的文件,打包到AlarmReport目錄;將startup.sh打包到AlarmReport/bin目錄-->
    <fileSets>
<!-- 把項目相關的說明文件,打包進zip文件的根目錄 -->
<fileSet>
    <directory>${project.basedir}</directory>
    <outputDirectory>/</outputDirectory>
    <includes>
        <include>README*</include>
        <include>LICENSE*</include>
        <include>NOTICE*</include>
    </includes>
</fileSet>

<!-- 把項目的配置文件,打包進zip文件的config目錄 -->
<fileSet>
    <directory>${project.basedir}\src\main\config</directory>
    <outputDirectory>config</outputDirectory>
    <includes>
        <include>*.xml</include>
        <include>*.properties</include>
    </includes>
</fileSet>

<!-- 把項目的腳本文件目錄( src/main/scripts )中的啓動腳本文件,打包進zip文件的跟目錄 -->
<fileSet>
    <directory>${project.build.scriptSourceDirectory}</directory>
    <outputDirectory></outputDirectory>
    <includes>
        <include>startup.*</include>
    </includes>
</fileSet>

<!-- 把項目的腳本文件(除了啓動腳本文件),打包進zip文件的script目錄 -->
<fileSet>
    <directory>${project.build.scriptSourceDirectory}</directory>
    <outputDirectory></outputDirectory>
    <includes>
        <exclude>startup.*</exclude>
    </includes>
</fileSet>

<!-- 把項目自己編譯出來的jar文件,打包進zip文件的根目錄 -->
<fileSet>
    <directory>${project.build.directory}</directory>
    <outputDirectory></outputDirectory>
    <includes>
        <include>*.jar</include>
    </includes>
</fileSet>
</fileSet>  </fileSets> </assembly>

打包命令: 

maven  -package