【SpringBoot】Spring Boot 项目的打包配置

在 Spring Boot 项目中,打包是一个非常关键的过程,通常你会选择将应用打包成一个 JAR 或 WAR 文件,并且可能会包含一些额外的资源和配置。不同类型的项目(如标准 Spring Boot 项目、Spring Boot + HTML 项目、Spring Boot + Web 项目)需要的打包配置会有所不同。下面,我会从这三个角度出发,详细介绍每种类型的 Spring Boot 项目打包配置及其解析。

1. Spring Boot 项目的打包配置

对于一个标准的 Spring Boot 项目,通常我们会使用 Spring Boot Maven 插件 或 Spring Boot Gradle 插件 来打包。以下是 Maven 打包的常见配置。

pom.xml 中的配置

复制代码
<build>
    <plugins>
        <!-- Spring Boot Maven Plugin -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 是否生成可执行的 JAR 包 -->
                <mainClass>com.example.demo.DemoApplication</mainClass>
            </configuration>
        </plugin>
        
        <!-- 可选:配置 Maven Shade 插件用于生成 Fat JAR -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

配置说明:

spring-boot-maven-plugin:这是 Spring Boot 提供的 Maven 插件,用于将应用打包成可执行的 JAR 文件,支持内嵌的 Tomcat/Jetty 容器。

mainClass:指定 Spring Boot 主应用类的全限定名,Spring Boot 启动时会从这个类开始执行。

maven-shade-plugin:这个插件用于创建 Fat JAR,它将所有依赖和 Spring Boot 项目代码打包到一个 JAR 中,方便部署和运行。

打包方式:

执行 mvn clean package 命令后,会生成一个包含所有依赖的 可执行 JAR 文件,可以通过 java -jar xxx.jar 启动。

如果你的 Spring Boot 应用需要独立运行,打包成 JAR 是最佳选择。

2. Spring Boot + HTML 项目的打包配置

在一个包含 HTML 页面和前端资源(如 JavaScript、CSS)的 Spring Boot 项目中,前端资源通常放在 src/main/resources/static 目录中,Spring Boot 会自动提供静态文件服务。

pom.xml 中的配置

复制代码
<build>
    <plugins>
        <!-- Spring Boot Maven Plugin -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.example.demo.DemoApplication</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build> 

资源文件目录结构:

src

└── main

├── java

├── resources

│ ├── static

│ │ ├── index.html

│ │ └── css/

│ │ └── styles.css

│ ├── templates

│ │ └── index.html

│ └── application.properties

配置说明:

静态资源:Spring Boot 默认会扫描 src/main/resources/static、src/main/resources/public、src/main/resources/META-INF/resources 和 src/main/resources/resources 目录下的文件,并作为静态资源服务。如果你将 HTML 文件放在 static 文件夹下,Spring Boot 会直接提供服务。

模板引擎:如果你使用了 Thymeleaf 等模板引擎,HTML 文件应该放在 templates 目录下,Spring Boot 会自动处理动态模板的渲染。

打包方式:

执行 mvn clean package 命令后,Spring Boot 会将 static 中的所有文件打包到 JAR 包中的 /BOOT-INF/classes/static/ 目录中。当你运行应用时,静态资源可以通过 /static/ 路径访问。

如果需要将前端文件与 Spring Boot 应用一起打包,前端代码不需要额外的构建步骤(除非使用了 Webpack 或其他前端构建工具)。

3. Spring Boot + Web 项目的打包配置

对于一个包含 Web 层(如控制器、过滤器、拦截器等)的 Spring Boot 项目,通常涉及到内嵌的 Web 容器(如 Tomcat 或 Jetty)。你可以选择将其打包为 WAR 文件,以便在外部的容器中运行,或者使用内嵌的 Tomcat 作为默认的 Web 容器。

pom.xml 中的配置

复制代码
<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring Boot Starter Tomcat (optional, Spring Boot 默认会包含 Tomcat) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <!-- Spring Boot Maven Plugin -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 如果是 WAR 包,指定主类 -->
                <mainClass>com.example.demo.DemoApplication</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

配置说明:

spring-boot-starter-web:用于支持 Spring MVC 功能,自动引入 Tomcat 作为嵌入式 Web 容器。你也可以使用其他容器,如 Jetty 或 Undertow。

spring-boot-starter-tomcat:如果你希望将应用部署到外部 Tomcat 容器中,需要将这个依赖的 scope 设置为 provided。如果你希望使用内嵌的 Tomcat,可以忽略此依赖,因为 Spring Boot 默认包含 Tomcat。

spring-boot-maven-plugin:用于打包时支持构建 WAR 文件。你可以配置 mainClass,指定应用的主类。

打包为 WAR 的配置:

复制代码
<packaging>war</packaging>

DemoApplication.java 修改为支持 WAR 包:

如果你要打包成 WAR 包,你需要做一些额外的配置,使 Spring Boot 应用支持外部 Web 容器。需要修改主类来扩展 SpringBootServletInitializer。

复制代码
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DemoApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

打包方式:

执行 mvn clean package 命令后,Spring Boot 会根据 pom.xml 的配置生成一个 WAR 文件,WEB-INF 下包含 Web 层的资源和配置文件。部署到外部的 Tomcat 或其他容器中时,可以通过 java -jar 命令运行内嵌的 Tomcat。

总结

Spring Boot 基础项目:适合构建独立应用,打包成 JAR 包,包含所有依赖,配置 spring-boot-maven-plugin。

Spring Boot + HTML 项目:适用于前端静态资源服务,静态文件(如 HTML、CSS、JS)放在 src/main/resources/static 中,打包为 JAR 包。

Spring Boot + Web 项目:适用于需要 Web 层的应用,可以选择内嵌 Web 容器或部署到外部容器,打包为 JAR 或 WAR 包。需要使用 SpringBootServletInitializer 来支持 WAR 包。

相关推荐
leeyi11 分钟前
Multi-Agent:让多个 AI 分工协作完成复杂任务
后端·aigc·agent
长栎12 分钟前
你的策略模式是 Map<String, Strategy>?那不过是最廉价的 if-else 替代品
后端
长栎18 分钟前
你写的 abstract class 里全是钩子方法——模板模式不是让你填空,是让你别越界
后端
ping某22 分钟前
语法树,到底是一棵什么形状的树?
后端
_柳青杨27 分钟前
一文吃透 Node.js 事件循环:从原理到 Node 20+ 重大变更
javascript·后端
Alson_Code44 分钟前
人机协作项目文档--HITL-AgentScope
后端·aigc·ai编程
IT_陈寒1 小时前
Java 并行流把我坑惨了,这6小时加班值了
前端·人工智能·后端
葫芦和十三2 小时前
图解 MongoDB 03|CRUD 全链路:一条 find 怎么穿过 WiredTiger
后端·mongodb·agent
葫芦和十三10 小时前
图解 MongoDB 04|索引模型:每建一个索引,就是在 B+-tree 森林里多栽一棵
后端·mongodb·agent
用户479492835691511 小时前
claude Fable用不了?把Gpt 5.5pro接到你的claude code里
前端·后端