maven打包插件——maven-assembly-plugin

说明

本文是对 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

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你在使用 Maven 时遇到找不到插件 maven-assembly-plugin 的问题,可以尝试以下解决方法: 1. 检查 Maven 的配置文件 settings.xml 中是否配置了正确的镜像源。可以在该文件中添加如下配置: ``` <mirrors> <mirror> <id>aliyunmaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors> ``` 这个配置会将 Maven 的默认镜像源替换为阿里云的镜像源,由于阿里云的镜像源是国内访问速度较快的镜像源之一,可以尝试使用这个配置来解决找不到插件的问题。 2. 检查 Maven 的本地仓库中是否已经下载了 maven-assembly-plugin 插件。可以在本地仓库的目录中查找是否有以下路径存在: ``` ~/.m2/repository/org/apache/maven/plugins/maven-assembly-plugin/ ``` 如果该路径不存在,说明 Maven 还没有下载该插件,可以尝试执行以下命令来下载该插件: ``` mvn dependency:get -Dartifact=org.apache.maven.plugins:maven-assembly-plugin:3.3.0 ``` 这个命令会下载 maven-assembly-plugin 插件的最新版本到本地仓库中。 3. 检查 Maven 的 pom.xml 文件中是否正确引入了 maven-assembly-plugin 插件。可以在 pom.xml 文件中添加以下配置: ``` <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> </plugin> </plugins> </build> ``` 这个配置会让 Maven 在构建时自动引入 maven-assembly-plugin 插件,如果该插件已经下载到本地仓库中,就可以正常使用了。 如果以上方法都无法解决问题,可以尝试在 Maven 的命令中加入 -U 参数来强制更新本地仓库中的插件版本。命令如下: ``` mvn clean package -U ``` 这个命令会清除 Maven 的缓存,并从远程仓库下载最新的插件版本到本地仓库中。如果该插件版本存在问题,可以尝试使用其他版本来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值