SpringBoot打包war

Spring Boot是支持发布jar包和war的,但它推荐的是使用jar形式发布。使用jar包比较方便,但如果是频繁修改更新的项目,需要打补丁包,那这么大的jar包上传都是问题。所以,jar包不一定合适适用所有的场景,如war包更合适,你可以尝试转为传统的war包,这样打补丁包可能更方便。

如何配置打war包呢?

以下配置以Maven为说明讲解,Gradle的查看类似配置。

1、修改Spring Boot启动类

启动类继承 SpringBootServletInitializer类,并覆盖 configure方法。

下面是Spring Boot提供的示例代码。

    @SpringBootApplication

    public class Application extends SpringBootServletInitializer {

        @Override

        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {

            return application.sources(Application.class);

        }

        public static void main(String[] args) throws Exception {

            SpringApplication.run(Application.class, args);

        }

    }

2、修改jar为war包形式

在pom文件中,添加war包配置。

   <packaging>war</packaging>

如果不添加,默认为jar包。

3、去除Spring Boot内置Tomcat

修改自带tomcat依赖范围为provided,防止与外部tomcat发生冲突。

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

4、添加war包打包插件

如果你用的是继承spring-boot-starter-parent的形式使用Spring Boot,那可以跳过,因为它已经帮你配置好了。如果你使用的依赖spring-boot-dependencies形式,你需要添加以下插件。

    <plugin>

        <groupId>org.apache.maven.plugins</groupId>

        <artifactId>maven-war-plugin</artifactId>

        <configuration>

            <failOnMissingWebXml>false</failOnMissingWebXml>

        </configuration>

    </plugin>

failOnMissingWebXml需要开启为false,不然打包会报没有web.xml错误。

如何打war包?

打war包方式和打jar包方式一样,没有区别。

  • 在Maven中使用 mvn cleanpackage命令即可打包。

  • 在Idea中可以这样设置打包:

    

即可

自定义设置war名字:

pop.xml

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-war-plugin</artifactId>


            </plugin>

        </plugins>
    <finalName>cimc</finalName> 自定义war名字
    </build>