【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 包。

相关推荐
李慕婉学姐1 小时前
Springboot剪纸数字博物馆系统6wd19a3a(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·spring boot·后端
追逐时光者2 小时前
精选 5 款 .NET 开源、实用的商城系统(Shop),快速商城二开利器!
后端·.net
追逐时光者2 小时前
一款基于 .NET + 计算机视觉技术开源免费、功能强大的原神智能辅助工具,一键解放双手!
后端·.net
90后小陈老师2 小时前
用户管理系统 05 实现后端注册功能 | Java新手实战 | 最小架构 | 期末实训 | Java+SpringBoot+Vue3
java·开发语言·spring boot·后端·spring·maven·mybatis
Coding_Doggy2 小时前
链盾shieldchain | 项目管理、DID操作、DID密钥更新消息定时提醒
java·服务器·前端
j***63082 小时前
【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目
java·spring boot·spring
k***85842 小时前
【SpringBoot】【log】 自定义logback日志配置
android·前端·后端
JIngJaneIL3 小时前
汽车租赁|汽车管理|基于Java+vue的汽车租赁系统(源码+数据库+文档)
java·vue.js·spring boot·汽车·论文·毕设·汽车租赁
曾经的三心草3 小时前
JavaEE初阶-多线程1
android·java·java-ee