SpringBoot中Package打包的实现小结

 更新时间:2026年03月06日 08:55:56   作者:何必余生  
本文详细介绍了将SpringBoot项目打包成jar或war,包括jar的默认打包、war的内嵌tomcat排除和配置,以及部署到外部Tomcat的步骤,适合开发者理解和实践项目部署,感兴趣的可以了解一下

SpringBoot项目在日常开发中是现在开发形式中的基础模式了、在构建、编码、测试、运行、打包、部署等一系列过程中、打包的方式就是其中一个非常重要的环节、SpringBoot默认的打包方式是jar但是在日常部署的方式中、我们需要根据不同的部署情况进行讲项目打成不成的包进行服务器部署、话又说来说、SpringBoot内嵌了tomcat但是打包方式确实jar、所以在这里需要进行整理一下如何讲一个SpringBoot项目打包成jar或者war进行项目发布部署。

1、前期准备工作

  • 拥有 Java 开发环境以及相应 IDE
  • 熟悉 Spring Boot
  • 熟悉 Maven
  • 掌握基本的打包部署能力

现有一张 User 表,其表结构如下:

idnameageemail
1Jone18test1@baomidou.com
2Jack20test2@baomidou.com
3Tom28test3@baomidou.com
4Sandy21test4@baomidou.com
5Billie24test5@baomidou.com
其对应的数据库 Schema 脚本如下:
DROP TABLE IF EXISTS user;

CREATE TABLE user
(
	id BIGINT(20) NOT NULL COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);

最终我们将初始化Springboot项目进行整合MybaitsPlus进行数据页面访问展示即可来演示打包。

访问方式:localhost:8080/list/all

2、jar

SpringBoot项目默认的打包方式就 jar包、所以我们无需作出更多的配置就可以很轻松的进行项目打包部署。

1、pom修改

# 默认为jar、如果没有自行编写、默认不写
<packaging>jar</packaging>

# 修改最终打成jar包的包名
<build>
    <!--指定打包名称-->
        <finalName>springboot-jar-war</finalName>
</build>

2、新建maven打包

3、编写maven打包执行脚本(排除测试、关联项目)

4、执行打包

最终打成jar包的存放地:在target目录下

java -jar springboot-jar-war.jar即可执行(springboot内嵌了tomcat)

3、war

springboot打成war运行在外部的tomcat或者服务中使用应该从以下思路开始

  • 1、springboot内嵌了tomcat、需要排除内部容器
  • 2、启动类中springboot启动通过main方法进入项目外部容器部署需要告知项目的入口类加载

1、pom修改

springboot默认打包方式修改为war

<!--打包方式-->
<packaging>war</packaging>

2、添加/排除依赖

因为程序在启动、编译的时候还是需要servlet的依赖、等生命周期应该在打包完成之前排除掉内嵌的tomcat
所以有两种方式、任选其中一项都是可以的(不可以两个同时存在)

#####   方式1:打包完成后直接排除内嵌Tomcat依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!--打包排除内部的tomcat-->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

#####   方式2:打包的时候可以不用包进去,外部提供、但是可以让参与测试编译等生命周期
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <!--打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。
        相当于compile,但是打包阶段做了exclude操作-->
    <scope>provided</scope>
</dependency>

3、修改启动项

继承org.springframework.boot.web.servlet.support.SpringBootServletInitializer,实现configure方法:

SpringBootServletInitializer源码解读

从上述源码注释中可以看出

方式1:

springboot启动类中去继承SpringBootServletInitializer并且重写configure方法来指定项目的入口

@SpringBootApplication
@MapperScan("com.zkr.springbootjarwar.mapper")
public class SpringbootJarWarApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootJarWarApplication.class, args);
    }

    /**
     * 继承SpringbootJarWarApplication 重写 configure
     * 实现war外部程序主入口的指定
     * @param builder
     * @return
     */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringbootJarWarApplication.class);
    }
}

方式2:

新增加一个类继承SpringBootServletInitializer实现configure

/**
 * @author LG
 * @date 2021/2/23 - 17:23
 * @Motto "何必余生、及时行乐、Good luck mi"
 */
public class Springbootjarwar extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        //此处的Application.class为带有@SpringBootApplication注解的启动类
        return builder.sources(SpringbootJarWarApplication.class);
    }
}
  • 更加推荐使用第一种!不要问经验所得

maven执行打包脚本生成war

4、部署外部容器

以Tomcat为例:
将war放入Tomcat的WebApps目录下
然后启动tomcat

访问成功:但是访问的时候需要添加包名才可以

注意事项:

使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置的
server.port=
server.servlet.context-path=
将失效,请使用tomcat的端口,tomcat,webapps下项目名进行访问。
为了防止应用上下文所导致的项目访问资源加载不到的问题,
建议pom.xml文件中标签下添加最终的包名指定标签:

4、解决访问路径

我们将项目打成war包之后、可能在有些时候需要添加项目名称来访问、但有时候不需要、就想springboot中application.yml中可以通过server.servlet.context-path=来指定、那么外部的时候Tomcat也可以指定。并且修改端口

# path : / 表示不需要项目名
# docBase:项目路径 这里写相对路径、相对webapps、不要问我怎么知道的  appBase有指定
<Context path="/" docBase="项目地址路径" debug="0" />

5、端口修改

Tomcat默认为8080
可以在这里修改指定端口

6、总结

jar不需要修改任何配置、使用maven进行脚本打包即可

war:需要排除内部tomcat、或者添加编译测试运行等周期的servlet支持、在最终同样也排除了容器

springbootApplication应用main类继承SpringBootServletInitializer类实现configure在进行项目打包即可!

到此这篇关于SpringBoot中Package打包的实现小结的文章就介绍到这了,更多相关SpringBoot Package打包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot Validation提示信息国际化配置方式

    SpringBoot Validation提示信息国际化配置方式

    这篇文章主要介绍了SpringBoot Validation提示信息国际化配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 浅谈java中OO的概念和设计原则(必看)

    浅谈java中OO的概念和设计原则(必看)

    下面小编就为大家带来一篇浅谈java中OO的概念和设计原则(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Java服务端如何解决跨域问题 CORS请求头方式

    Java服务端如何解决跨域问题 CORS请求头方式

    这篇文章主要介绍了Java服务端如何解决跨域问题 CORS请求头方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Java连接各种数据库的方法

    Java连接各种数据库的方法

    这篇文章主要介绍了Java连接各种数据库的方法,实例分析了java连接MySQL、SQL Server、Sysbase、Oracle、PostgreSQL及DB2等数据库的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • Java之JVM的内存分析(简单版+案例)

    Java之JVM的内存分析(简单版+案例)

    这篇文章主要介绍了Java之JVM的内存分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Java雪花算法生成分布式id详解

    Java雪花算法生成分布式id详解

    这篇文章主要介绍了Java雪花算法生成分布式id详解,随着业务的增长,有些表可能要占用很大的物理存储空间,为了解决该问题,后期使用数据库分片技术,将一个数据库进行拆分,通过数据库中间件连接,需要的朋友可以参考下
    2024-01-01
  • 用IDEA如何打开文件夹

    用IDEA如何打开文件夹

    这篇文章主要介绍了用IDEA如何打开文件夹问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java通过JavaMail发送邮件功能

    Java通过JavaMail发送邮件功能

    这篇文章主要为大家详细介绍了Java通过JavaMail发送邮件功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 详解Java发送HTTP请求

    详解Java发送HTTP请求

    这篇文章主要介绍了Java发送HTTP请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 关于Java float和double精度范围大小

    关于Java float和double精度范围大小

    这篇文章主要介绍了关于Java float和double精度范围大小,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论