Springboot生成war部署到Tomcat
Posted sadoshi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot生成war部署到Tomcat相关的知识,希望对你有一定的参考价值。
前言
今天刚好一个同事叫我友情协助给个简单的war包他,用来作为培训的素材。确实是个很简单的东西,我却整整坑了2个多小时在里面。因为这些年用springboot都是生成jar包直接启动,还真没做过几个项目是生成war扔tomcat上的。结果好一阵子搜索,其实也没什么,无非就是pom排除内嵌的tomcat,主类继承SpringBootServletInitializer并重写的configure方法。但就这么点简单的东西居然也坑了,正好就mark一下。
简单实例
一般很多时候都是用jar跑就行了,生成war的话需要修改pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gdtel.iboc</groupId>
<artifactId>HelloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>helloworld</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
第八行<packaging>标签里面是war,表示我们要打包生成的是war包。因为springboot自带tomcat,和要部署的tomcat的包可能存在版本冲突,需要排除,21-30行就是解决这个问题。34行代表我们要生成war包的名称。
接下来要修改主类,假设这里我的主类是App.class
@SpringBootApplication
public class App extends SpringBootServletInitializer
public static void main(String[] args)
SpringApplication.run(App.class, args);
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder)
return builder.sources(App.class);
这里继承SpringBootServletInitializer并重写configure方法。然后执行mvn package,把生成的war包扔tomcat的webapps目录下即可,启动tomcat即可。
坑点
今天被坑主要原因在于两点:
1、Springboot2.x以上要用tomcat8.5以上。我用的是好多年前下的tomcat8.0,因此怎么折腾都报错主要是报invalid LOC header,查了半天,大部分答案都是说jar包损坏重新下一次,但用maven test跑没报错,所以并不是这个问题。
2、Java EE生成的javaweb要放在tomcat10的webapps-javaee目录下(没有就新建一个)。我按惯例放webapps下,结果跑不起来。因为webapps下放的要用Jakarta EE,具体原因可以网上查。所以要么通过转换工具把Java EE转成Jakarta EE,要么放到webapps-javaee下让tomcat给你转。
以上是关于Springboot生成war部署到Tomcat的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot:在 Tomcat 7 上部署 WAR