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)