全部学科
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方式部署

📝 发现内容有误?点击此处直接编辑

← 上一篇 Spring Boot项目结构解析
下一篇 → 使用Spring Initializr创建项目
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库