You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:23:31