Skip to content

打包方式

1. 创建可执行的 JAR 文件

这是 Spring Boot 推荐的方式,默认情况下也是最常用的方式。

JAR(Java Archive)文件包含了应用程序的所有依赖、类和资源,使得它成为一个独立的、易于部署的单元。你可以通过以下步骤创建一个可执行的 JAR 文件:

使用 Maven 打包

在项目的根目录下运行以下命令:

bash
mvn clean package

这将编译代码并生成一个包含所有依赖的 JAR 文件,通常位于 target/ 目录中。例如,如果你的应用程序名为 myapp,那么生成的文件可能是 target/myapp-0.0.1-SNAPSHOT.jar

使用 Gradle 打包

对于使用 Gradle 的项目,可以在项目的根目录下运行:

bash
./gradlew bootJar

这同样会生成一个可执行的 JAR 文件,通常也位于 build/libs/ 目录中。

运行可执行 JAR 文件

你可以直接运行生成的 JAR 文件:

bash
java -jar target/myapp-0.0.1-SNAPSHOT.jar

2. 创建可部署的 WAR 文件

WAR(Web Application Archive)文件主要用于部署到传统的 Servlet 容器(如 Tomcat、Jetty 或者 WebSphere)。要创建 WAR 文件,你需要做一些额外的配置:

修改 pom.xmlbuild.gradle

确保你的构建配置文件指定了打包类型为 war

Maven 示例 (pom.xml):

xml
<packaging>war</packaging>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

Gradle 示例 (build.gradle):

groovy
apply plugin: 'war'

dependencies {
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}

创建 SpringBootServletInitializer 子类

为了让 Spring Boot 应用能够作为 WAR 文件部署,你需要创建一个继承自 SpringBootServletInitializer 的类,并重写 configure 方法。

java
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class MyApplication extends SpringBootServletInitializer {

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

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

使用 Maven 或 Gradle 打包

Maven:

bash
mvn clean package

Gradle:

bash
./gradlew bootWar

这将在 target/build/libs/ 目录下生成一个 WAR 文件。

部署 WAR 文件

将生成的 WAR 文件复制到你选择的 Servlet 容器的 webapps 目录下,然后启动容器即可。

3. 其他打包方式

除了上述两种主要方式,Spring Boot 还支持其他打包和部署方式:

  • Docker 镜像:可以使用 Dockerfile 将应用程序打包成 Docker 镜像,便于容器化部署。
  • 云平台特定格式:一些云平台(如 Heroku、Cloud Foundry)可能有自己特定的打包和部署流程。
  • Native Image:使用 GraalVM 编译为本地二进制文件,以提高启动时间和减少内存占用。