如何使用Maven Assembly插件打包Spring Boot Web应用
使用Maven Assembly插件打包Spring Boot Web应用
咱一步步来搞定这个打包需求,结合你提供的pom.xml结构,下面是具体操作步骤:
1. 给你的pom.xml添加Assembly插件配置
在pom.xml的<build><plugins>节点下加入以下插件配置,这样Maven就能识别并使用Assembly插件:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <!-- 建议使用最新稳定版 --> <configuration> <!-- 指定Assembly描述符文件的路径 --> <descriptors> <descriptor>src/main/assembly/assembly.xml</descriptor> </descriptors> </configuration> <!-- 绑定插件到Maven的package生命周期,执行package时自动打包 --> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
另外,注意和Spring Boot自带的打包插件兼容,如果你的pom里已经有spring-boot-maven-plugin,需要调整它的配置避免冲突:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!-- 跳过Spring Boot的repackage,让Assembly负责打包 --> <configuration> <skip>true</skip> </configuration> </plugin>
2. 创建Assembly描述符文件
在项目根目录下新建src/main/assembly文件夹,然后创建assembly.xml文件,这个文件用来定义打包规则(比如要包含哪些文件、输出格式等)。下面是适合Spring Boot Web应用的示例配置:
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd"> <!-- 打包后的文件名后缀 --> <id>dist</id> <!-- 输出格式,支持jar、tar.gz、zip等 --> <formats> <format>tar.gz</format> <format>zip</format> </formats> <!-- 是否包含根目录 --> <includeBaseDirectory>true</includeBaseDirectory> <!-- 配置依赖包的打包规则 --> <dependencySets> <dependencySet> <!-- 把所有依赖打包到lib目录下 --> <outputDirectory>lib</outputDirectory> <useProjectArtifact>false</useProjectArtifact> <unpack>false</unpack> </dependencySet> </dependencySets> <!-- 配置项目自身文件的打包规则 --> <fileSets> <!-- 打包项目编译后的class文件到classes目录 --> <fileSet> <directory>${project.build.outputDirectory}</directory> <outputDirectory>classes</outputDirectory> </fileSet> <!-- 打包src/main/resources下的配置文件到classes目录 --> <fileSet> <directory>src/main/resources</directory> <outputDirectory>classes</outputDirectory> </fileSet> <!-- 如果有启动脚本,可以打包到根目录 --> <fileSet> <directory>src/main/scripts</directory> <outputDirectory>.</outputDirectory> <includes> <include>start.sh</include> <include>start.bat</include> </includes> <!-- 给脚本添加可执行权限 --> <fileMode>0755</fileMode> </fileSet> </fileSets> </assembly>
3. 执行打包命令
配置完成后,在项目根目录下运行以下Maven命令即可完成打包:
mvn clean package
因为我们已经把Assembly插件绑定到了package生命周期,执行这个命令后,会在target目录下生成类似your-project-name-1.0-SNAPSHOT-dist.tar.gz和your-project-name-1.0-SNAPSHOT-dist.zip的打包文件。
如果你不想绑定生命周期,也可以直接运行:
mvn clean assembly:single
额外说明
- 你可以根据需求调整
assembly.xml里的配置,比如修改输出格式、调整文件目录结构、排除不需要的依赖或文件。 - 如果需要打包成可执行jar包,也可以在描述符里配置
containerDescriptorHandler指定主类,但通常Spring Boot用Assembly打包更多是生成包含依赖和配置的分发包,配合启动脚本运行。
内容的提问来源于stack exchange,提问作者Lyn
相关产品推荐
相关产品推荐

