SpringBoot 打包成 war

pom.xml 修改

将 jar 修改为 war

1
<packaging>war</packaging>

使用 Maven 创建 SpringBoot 项目,默认打包为 jar。

spring-boot-starter-web 依赖中移除 tomcat 模块

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>

SpringBoot 自带 tomcat,需要移除

添加 servlet 依赖

1
2
3
4
5
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>

<build> 节点中的 finalName 修改为 server.context-path 中的路径。

1
2
3
4
5
6
<build>
<plugins>
...
</plugins>
<finalName>${project.name}</finalName>
</build>

修改 SpringBoot 项目启动类,继承 SpringBootServletInitializer

1
2
3
4
5
6
7
8
9
10
11
12
public class MySpringBootApplication extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(MySpringBootApplication.class);
}

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

使用 mvn 打包

1
mvn clean package -Dmaven.test.skip=true

在项目的 target 目录下就可以看到 .war 文件

将 .war 文件部署到 tomcat 的 webapps 目录下