前沿
故事发生背景:最近帮老师的项目做了一个联调,项目是springboot项目,但是打包却打的是war包,这就不是很常见了,中间出了很多问题,便从网上找了不少资料,便总结出来流程,以便自己和他人方便使用。
一、修改pom.xml文件
<packaging>jar</packaging>
改为 <packaging>war</packaging>
若没有则手动添加即可(我这里便没有手动添加的)
二、移除嵌入式tomcat插件
在 pom.xml
里找到spring-boot-starter-web
依赖,在其中添加如下代码,
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--排除内部的Tomcat-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
因为spring-boot-starter-web
依赖中有Tomcat 的依赖,点进去就可以看到,如下图
三、添加servlet-api的依赖
在 pom.xml 中新增以下依赖:
<!--打war包引入的下面依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
四、修改启动类,并重写初始化方法
我们平常用 main 方法启动的方式,都有一个App的启动类,代码如下:
@SpringBootApplication
public class DemoFengfanliApplication{
public static void main(String[] args) {
SpringApplication.run(DemoFengfanliApplication.class, args);
}
}
我们需要类似于web.xml
的配置方式来启动 Spring 上下文了,在 Application 类的同级添加一个(自定义的)SpringBootStartApplication
类,其代码如下:
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(DemoFengfanliApplication.class);
}
}
五、打包
1. 方式一:maven命令
在项目根目录下(即包含pom.xml的目录),在命令行里输入:mvn clean package -Dmaven.test.skip=true
即可, 等待打包完成,出现 [INFO] BUILD SUCCESS 即为打包成功。
2. 方式二:可视化打包
六、部署
然后把target
目录下的war
包放到 tomcat
的 webapps
目录下,启动 tomcat
,即可自动解压部署。
最后在浏览器中输入
http://localhost:[端口号]/[打包项目名]/
发布成功
七、修改打包默认名称
配置configuration
中的 finalName
,就是打包后的默认名称。进行名称规范合理化。
<build>
<plugins>
<plugin>
<configuration>
<finalName>demo_fengfanli</finalName><!-- 打包后的war名称-->
</configuration>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>