全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-18 6 分钟 ✍️ juanwangdev

SpringBoot打包与部署jar与war

SpringBoot 支持 JAR 和 WAR 两种部署方式。

JAR vs WAR对比

对比项JARWAR
容器内嵌Tomcat外部Tomcat
启动java -jar部署到Tomcat
结构可执行包Web应用包
适用微服务、云原生传统部署、共享容器

JAR打包配置

XML
<project>
    <packaging>jar</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
Bash
# 打包
mvn clean package

# 运行
java -jar target/my-app.jar

WAR打包配置

修改pom.xml

XML
<project>
    <!-- 修改打包类型 -->
    <packaging>war</packaging>

    <!-- 标记内嵌容器为provided -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 本地开发保留,部署时排除 -->
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>my-app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

继承SpringBootServletInitializer

Java
@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {

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

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

WAR打包命令

Bash
mvn clean package
# 输出: target/my-app.war

WAR部署步骤

1. Tomcat配置

XML
<!-- tomcat/conf/server.xml -->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

2. 部署WAR

XML
# 复制WAR到webapps目录
cp my-app.war $TOMCAT_HOME/webapps/

# Tomcat自动解压并部署
# 访问: http://localhost:8080/my-app/

3. 配置context路径

dockerfile
<!-- tomcat/conf/Catalina/localhost/my-app.xml -->
<Context docBase="/path/to/my-app.war" path="/myapp" />

选择依据

场景推荐
微服务架构JAR
Docker容器部署JAR
多应用共享容器WAR
传统运维环境WAR
快速开发测试JAR

Docker部署JAR

Bash
FROM openjdk:17-jdk-alpine
WORKDIR /app
COPY my-app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
dockerfile
docker build -t my-app .
docker run -p 8080:8080 my-app

Docker部署WAR

Java
FROM tomcat:9-jdk17
COPY my-app.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh", "run"]

同时支持两种方式

text
@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {

    // WAR部署入口
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(MyApplication.class);
    }

    // JAR运行入口
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

main方法用于JAR运行,configure方法用于WAR部署。

要点总结

  • JAR内嵌容器,适合微服务
  • WAR部署外部容器,适合传统环境
  • WAR需继承SpringBootServletInitializer
  • spring-boot-starter-web设为provided
  • Docker推荐JAR方式部署
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 编写第一个RESTful接口
下一篇 → SpringBoot配置文件properties与yml
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码