SpringBoot war包 jar包区别

4,012 阅读1分钟

Spring Boot支持发布jar包和war包,推荐使用jar包的形式,使用jar包比较方便

区别

  • pom文件
    1. packaging,war或者jar
    2. 内置容器tomcat依赖,war包需排除tomcat依赖
    3. 配置文件web.xml
  • 入口类
    1. 入口类继承SpringBootServletInitializer
    2. 重写configure方法

打包

packaging的方式不同

<?xml version="1.0" encoding="UTF-8"?>
<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.spring.study</groupId>
    <artifactId>study-demo</artifactId>
    <!— 修改此处 -->
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

继承的方式不同

war包Application.java需要继承SpringBootServletInitializer,而jar包不需要

war包继承方式如下

@SpringBootApplication
public class Application extends SpringBootServletInitializer{
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }


    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }
}

依赖配置不同

war包需排除tomcat依赖,并将tomcat相关依赖的scope设置成provided

<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>

添加war包打包插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

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

运行

  1. jar包,直接通过java -jar来运行
  2. war包,需要将其放到web容器,如tomcat的webapps目录下,然后启动tomcat 通过tomcat可以便捷的设置jvm、运行线程等,还可以将多个应用映射到同一个端口上

注意:打包war包的时候,application.properties配置的server.port和server.servlet.context-path就无效了,需跟进war包容器的配置