Spring Initializr 的 JAR 打包和 WAR 打包的区别是什么?

使用Spring Initializr 生成Web应用程序。

在Spring Initializr上使用以下设置生成Web应用程序的模版。

    • Project: Gradle Project

 

    • Language: Java

 

    • Spring Boot: 2.2.1

 

    • Java: 8

 

    Dependencies: Spring Web

生成了将 Packaging 项目分别打包成 Jar 和 War 文件,并使用 diff 命令进行比较取得差异。

Jar 和 War 的区别

$ diff -r jar war
diff -r jar/demo/build.gradle war/demo/build.gradle
4a5
>   id 'war'
16a18
>   providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
Only in war/demo/src/main/java/com/example/demo: ServletInitializer.java

Gradle战争插件

在 War 应用中添加了 Gradle 的 War 插件。

id 'war'

战争插件是一个添加生成war文件任务的插件。

参考:战争插件

Spring Boot Tomcat Starter的中文释义是“春季引导Tomcat启动器”。

这个应用程序中,使用了 Spring Boot Tomcat Starter,并在 providedRuntime 中进行了指定。

providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

在本地环境下运行时,将使用内置的 Tomcat,但通过指定 providedRuntime,可以在生成 WAR 文件时不包括内置的 Tomcat。

ServletInitializer (初始化Servlet)

War应用程序中添加了ServletInitializer。

package com.example.demo;

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(DemoApplication.class);
  }

}

这是一个实现了WebApplicationInitializer接口的类,用于在部署并运行war文件的环境中。
参考:SpringBootServletInitializer(Spring Boot文档2.2.1.RELEASE API)

广告
将在 10 秒后关闭
bannerAds