Spring Boot

SpringBoot:将项目打包成war包运行在外置tomcat

2021-06-24  本文已影响0人  Renaissance_

Spring Boot内置的tomcat容器,打包成jar包后就可直接运行,配合docker容器化部署,使得项目部署更加简单。但是如果想要Springboot打包成war包,使用外置的web容器部署,应该怎么配置呢。本文将详细介绍,如何将SpringBoot项目打包成war包。

1. 修改web模块的pom.xml配置

在笔者的项目中,一个项目被分成多个模块,包括web,biz,common,dao,model等,通过划分模块,使代码结构更加清晰明了。因为主启动类在web模块,所以修改web模块的pom配置。

项目结构
    <artifactId>cms-label-web</artifactId>
    <packaging>war</packaging>
       <!--spring-boot-->
        <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>
      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <!--打包的时候可以不用包进去-->
            <scope>provided</scope>
        </dependency>
  <build>
        <finalName>ROOT</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!--可以不用添加web.xml-->
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>
            <plugin>
                <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-deploy-plugin -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <!--deploy 时忽略 model-->
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

2. 修改非web模块的pom.xml配置

<packaging>jar</packaging>

3. 新增ServletInitializer

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {
 
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Bootstrap.class);
    }

}

4. 测试

image.png image.png image.png image.png image.png image.png

5. 问题

Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project cms-label-web: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)

image.png image.png image.png

解决办法,加上maven-war-plugin插件,这个插件

         <!--可以不用添加web.xml-->
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>

SpringBootServletInitializer的执行过程,简单来说就是通过SpringApplicationBuilder构建并封装SpringApplication对象,并最终调用SpringApplication的run方法的过程

spring boot就是为了简化开发的,也就是用注解的方式取代了传统的xml配置。

SpringBootServletInitializer就是原有的web.xml文件的替代。

使用了嵌入式Servlet,默认是不支持jsp。

上一篇下一篇

猜你喜欢

热点阅读