我们相信:世界是美好的,你是我也是。 来玩一下解压小游戏吧!

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

苏南大叔:SpringBoot项目,jar包和war包有何区别?war包修改事项 - springboot-jar
SpringBoot项目,jar包和war包有何区别?war包修改事项(图9-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10openjdk@23.0.2IntelliJ IDEA 2024.3.4.1maven@3.3.2spring boot@2.5.4java@17mysql@5.7.26MyBatisPlus@3.4.3.4。本文仅仅讨论springboot项目的打包问题,并不涉及普通的java项目,普通java项目可以依然沿用传统war包。

配置项切换

除了在项目初始化的时候,可以进行更改外,已有的项目,也是可以切换这两个jarwar的区别的。修改的配置文件是:项目根目录下的pom.xml,项目是packaging

修改成jar:

<packaging>jar</packaging>
XML

苏南大叔:SpringBoot项目,jar包和war包有何区别?war包修改事项 - springboot-packaging
SpringBoot项目,jar包和war包有何区别?war包修改事项(图9-2)

修改成war:

<packaging>jar</packaging>
XML

JAR 包

JARArchive)是一种将 Java 应用程序及其依赖打包成单一文件的格式,适合独立运行的应用程序。它会一直保持单一文件状态,除非外部有人对其进行反编译。所以,它是具有加密的自带特性的。

  • 独立运行:JAR 包自带嵌入式服务器(如TomcatJetty),可以通过 -jar 命令直接运行。
  • 轻量化部署:无需依赖外部应用服务器,部署简单。
  • Spring Boot 默认支持:Spring Boot 项目默认生成 JAR 包,内置 Tomcat 容器。

运行命令:

java -jar my-springboot-app.jar
Plain text

苏南大叔:SpringBoot项目,jar包和war包有何区别?war包修改事项 - jar-packing
SpringBoot项目,jar包和war包有何区别?war包修改事项(图9-3)

WAR包

WARWeb Application Archive)是一种适用于Web应用的打包格式,通常部署到外部应用服务器(如Tomcat)。它并不会一直保持单一文件状态,服务器有可能会直接把war解包成传统的网站项目结构。所以,这种模式下,加密的效果就不如jar包了。

  • 依赖外部服务器WAR 包需要部署到支持 Servlet 容器的应用服务器中运行。
  • 传统Web应用支持:适合需要与其他应用共享同一服务器的场景。
  • 需要额外配置Spring Boot项目需要额外配置以支持WAR打包。

表格对比

特性JARWAR
运行方式独立运行,内置服务器依赖外部服务器
部署复杂度简单,直接运行复杂,需要配置服务器
适用场景微服务、快速开发单体应用、企业级项目
Spring Boot 支持默认支持需要额外配置
  • 如果是 微服务架构独立运行的应用,推荐使用 JAR
  • 如果是 传统企业级项目 或需要与其他应用共享服务器,推荐使用 WAR

springboot war之配置修改

对于springboot项目来说,打包成war包,能顺利运行的话,还需要对代码进行修改。

苏南大叔:SpringBoot项目,jar包和war包有何区别?war包修改事项 - 修改配置
SpringBoot项目,jar包和war包有何区别?war包修改事项(图9-4)

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

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

src\main\resources\application.properties

server.servlet.context-path=/
Ini

苏南大叔:SpringBoot项目,jar包和war包有何区别?war包修改事项 - 上下文根目录
SpringBoot项目,jar包和war包有何区别?war包修改事项(图9-5)

springboot war之代码修改

苏南大叔:SpringBoot项目,jar包和war包有何区别?war包修改事项 - application继承
SpringBoot项目,jar包和war包有何区别?war包修改事项(图9-6)

src\main\java\com\example\demo\DemoApplication.java:

//...
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(DemoApplication.class);
    }
    //...
}
Java

springboot war之构建

SpingBootjar包启动的时候,会显示内置的tomcat9.0.25版本。所以,打包成war的时候,依然需要外置tomcat@9。否则,跑不起来。

苏南大叔:SpringBoot项目,jar包和war包有何区别?war包修改事项 - war包构建
SpringBoot项目,jar包和war包有何区别?war包修改事项(图9-7)

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

苏南大叔:SpringBoot项目,jar包和war包有何区别?war包修改事项 - springboot-war
SpringBoot项目,jar包和war包有何区别?war包修改事项(图9-8)

启动Tomcat,访问应用。

苏南大叔:SpringBoot项目,jar包和war包有何区别?war包修改事项 - 运行成功
SpringBoot项目,jar包和war包有何区别?war包修改事项(图9-9)

参考文章:

结语

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

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   java