SpringBoot项目,jar包和war包有何区别?war包修改事项
发布于 作者:苏南大叔 来源:程序如此灵动~

默认情况下,springboot
的项目,都是会打包成jar
包,和war
包相比较而已,最明显的好处就是有一定的加密作用。其次来说,就是jar
包默认集成tomcat
,部署方便。那么,springboot
项目打包成jar
包,就没有什么缺点么?

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10
,openjdk@23.0.2
,IntelliJ IDEA 2024.3.4.1
,maven@3.3.2
,spring boot@2.5.4
,java@17
,mysql@5.7.26
,MyBatisPlus@3.4.3.4
。本文仅仅讨论springboot
项目的打包问题,并不涉及普通的java
项目,普通java
项目可以依然沿用传统war
包。
配置项切换
除了在项目初始化的时候,可以进行更改外,已有的项目,也是可以切换这两个jar
和war
的区别的。修改的配置文件是:项目根目录下的pom.xml
,项目是packaging
。
修改成jar
:

修改成war
:
JAR 包
JAR(Archive
)是一种将 Java 应用程序及其依赖打包成单一文件的格式,适合独立运行的应用程序。它会一直保持单一文件状态,除非外部有人对其进行反编译。所以,它是具有加密的自带特性的。
- 独立运行:JAR 包自带嵌入式服务器(如
Tomcat
、Jetty
),可以通过-jar
命令直接运行。 - 轻量化部署:无需依赖外部应用服务器,部署简单。
- Spring Boot 默认支持:Spring Boot 项目默认生成 JAR 包,内置 Tomcat 容器。
运行命令:

WAR包
WAR(Web Application Archive
)是一种适用于Web
应用的打包格式,通常部署到外部应用服务器(如Tomcat
)。它并不会一直保持单一文件状态,服务器有可能会直接把war
解包成传统的网站项目结构。所以,这种模式下,加密的效果就不如jar
包了。
- 依赖外部服务器:
WAR
包需要部署到支持Servlet
容器的应用服务器中运行。 - 传统
Web
应用支持:适合需要与其他应用共享同一服务器的场景。 - 需要额外配置:
Spring Boot
项目需要额外配置以支持WAR
打包。
表格对比
特性 | JAR | WAR |
---|---|---|
运行方式 | 独立运行,内置服务器 | 依赖外部服务器 |
部署复杂度 | 简单,直接运行 | 复杂,需要配置服务器 |
适用场景 | 微服务、快速开发 | 单体应用、企业级项目 |
Spring Boot 支持 | 默认支持 | 需要额外配置 |
- 如果是 微服务架构 或 独立运行的应用,推荐使用 JAR。
- 如果是 传统企业级项目 或需要与其他应用共享服务器,推荐使用 WAR。
springboot war之配置修改
对于springboot
项目来说,打包成war
包,能顺利运行的话,还需要对代码进行修改。

首先pom.xml
需要修改依赖。在WAR
模式下,spring-boot-starter-tomcat
应该设置为provided
,因为Tomcat
容器由外部提供。
src\main\resources\application.properties
:

springboot war之代码修改

src\main\java\com\example\demo\DemoApplication.java
:
springboot war之构建
SpingBoot
的jar
包启动的时候,会显示内置的tomcat
是9.0.25
版本。所以,打包成war
的时候,依然需要外置tomcat@9
。否则,跑不起来。

而且为了消除tomcat
的webapps
配置,带来的目录多一层的问题。这里,对于打包好的war
包,需要改名为ROOT.war
包才能使用(目的是争夺url
的根目录)。将生成的WAR
包改名后,放入Tomcat
的webapps
目录。

启动Tomcat
,访问应用。

参考文章:
结语
通过以上分析,可以根据项目需求选择合适的打包方式,从而更高效地完成部署和运行。更多苏南大叔的java
相关文章,请点击:


