优秀的编程知识分享平台

网站首页 > 技术文章 正文

如何将spring boot项目打包成war包

nanyue 2025-02-28 16:50:59 技术文章 6 ℃


同事问了,打成war不能执行,报错,找了好久找不到原因,今天自己也碰到这个问题,一样的。


原因是servlet关联没有,二是启动时调用原始的启动类


解决方案如下:


pom.xml

1、打war

war


2、去掉关联,可选步骤


org.springframework.boot
spring-boot-starter-web



org.springframework.boot
spring-boot-starter-tomcat



3、添加servlet-api的依赖(下面任一)



javax.servlet
javax.servlet-api
3.1.0
provided


org.apache.tomcat
tomcat-servlet-api
8.0.36
provided


4、增加启动再调用原始的main类

若原始的启动类是:AdminApplication,那么在同包中,增加如下的文件

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* 增加这个类,修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法
*/
public class SpringBootStartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(AdminApplication.class);
}
}


或者启动类改成

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class AdminApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(AdminApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}
}
最近发表
标签列表