说明

本文是对 maven-assembly-plugin常用配置的介绍,更详细的学习请参照官网文档地址:Apache Maven Assembly Plugin
maven-assembly-plugin作用:用于将 Maven 项目打包成可执行的程序或分发包,将项目中的代码、资源和所有依赖包的内容打成一个程序集

1.项目配置

1.1 创建assembly.xml文件

<assembly>
    <id>assembly</id>
    <formats>
        <format>zip</format>
        <format>jar</format>
        <format>tar.gz</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <!--   -->
        <fileSet>
            <directory>src/main/resources</directory>
            <outputDirectory>conf</outputDirectory>
            <includes>
                <include>*.xml</include>
                <include>*.properties</include>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
            <fileMode>0644</fileMode>
        </fileSet>
        <fileSet>
            <directory>assembly/bin</directory>
            <outputDirectory>bin</outputDirectory>
            <fileMode>0755</fileMode>
        </fileSet>
    </fileSets>
    <dependencySets>
        <dependencySet>
            <outputDirectory>lib</outputDirectory>
        </dependencySet>
    </dependencySets>
</assembly>

2. 在项目的 pom.xml 文件中添加以下配置

2.1 使用assembly.xml打包成对应格式包体

<build>
        <plugins>
            <!--主要用于将 Maven 项目打包成可执行的程序或分发包 -->
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <executions>
                    <execution>
                        <id>make-assembly</id><!--名字任意 -->
                        <phase>package</phase><!-- 绑定到package生命周期阶段上 -->
                        <goals>
                            <goal>single</goal><!-- 只运行一次 -->
                        </goals>
                        <configuration>
                            <appendAssemblyId>true</appendAssemblyId><!-- 设为 FALSE, 防止包名加入 assembly.xml 中的 id -->
                            <attach>false</attach><!--指定是否将 Java 源代码附加到项目的构件列表中-->
                            <descriptors>
                                <descriptor>${project.basedir}/src/main/resources/assembly/assembly.xml</descriptor>
                            </descriptors>
                            <outputDirectory>${project.build.directory}</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

在这里插入图片描述
abc-test-0.0.1-SNAPSHOT.jar:当前项目单独jar(不包含外部资源)
在这里插入图片描述
abc-test-0.0.1-SNAPSHOT-assembly.jar:所有资源,项目jar和依赖jar都放在lib下
在这里插入图片描述
abc-test-0.0.1-SNAPSHOT-assembly.zip:项目所有资源打包成zip(雷同上面的jar)
在这里插入图片描述

2.2 使用assembly插件打包一个内库的jar文件

<build>
        <plugins>
            <!--主要用于将 Maven 项目打包成可执行的程序或分发包 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <descriptorRefs>
                    	<!--预定义的描述符格式-->
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id><!--名字任意 -->
                        <phase>package</phase><!-- 绑定到package生命周期阶段上 -->
                        <goals>
                            <goal>single</goal><!-- 只运行一次 -->
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

在这里插入图片描述
abc-test-0.0.1-SNAPSHOT.jar:当前项目单独jar(不包含外部资源)
在这里插入图片描述

abc-test-0.0.1-SNAPSHOT-jar-with-dependencies.jar:包含所有依赖class文件,将所有资源重新打包在一起
在这里插入图片描述

2.3 使用assembly插件打包一个可执行的jar文件

<build>
        <plugins>
            <!--主要用于将 Maven 项目打包成可执行的程序或分发包 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <executions>
                    <execution>
                        <id>make-assembly2</id><!--名字任意 -->
                        <phase>package</phase><!-- 绑定到package生命周期阶段上 -->
                        <goals>
                            <goal>single</goal><!-- 只运行一次 -->
                        </goals>
                        <configuration>
                            <archive>
                                <manifest>
                                    <mainClass>com.example.abctest.TestController</mainClass>
                                    <addClasspath>true</addClasspath>
                                    <classpathPrefix>lib/</classpathPrefix>
                                    <useUniqueVersions>false</useUniqueVersions>
                                </manifest>
                            </archive>
                            <descriptorRefs>
                                <descriptorRef>jar-with-dependencies</descriptorRef>
                            </descriptorRefs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

在这里插入图片描述
abc-test-0.0.1-SNAPSHOT.jar:当前项目单独jar(不包含外部资源)
在这里插入图片描述

abc-test-0.0.1-SNAPSHOT-jar-with-dependencies.jar:包含所有依赖class文件,将所有资源重新打包在一起
在这里插入图片描述

3. 总结

官方解释:An "assembly" is a group of files, directories, and dependencies that are assembled into an archive format and distributed.
翻译:“程序集”是一组文件、目录和依赖项,这些文件、目录和依赖项被组合成一种归档格式并进行分发

使用assembly.xml更加偏向于打包所以项目资源,例如可以将sql,jdbc等 脚本文件一起打包,方便项目的分发,但是无法将项目jar包打包成可执行的jar;如果需要将jar打包为可执行jar,可以使用2.3小节配置打包;其他打包方式可见maven打包插件——maven-jar-plugin

更多推荐