自学内容网 自学内容网

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


原文地址:https://blog.csdn.net/web14786210723/article/details/144339189

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!