SpringBoot依赖和代码分开打包

news2025/5/24 20:18:47

前言

在公司的项目中,一个SpringBoot工程可能就上百MB,这时候当线上网速不佳的时候,部署起来就十分的痛苦了。。经常等好久才能上传完毕,接下来我来教大家一个SpringBoot工程代码和依赖分开打包的方法。这种方法将依赖和代码分开打包,一般更新只有代码修改,Pom文件是不会经常改动的~

效果展示

分开打包前

足足有191MB
在这里插入图片描述

分开打包后

只剩3.5MB了
在这里插入图片描述
减负的效果拔群

创建新工程

工程结构

我新建了一个SpringBoot工程,目录结构如下。
在这里插入图片描述

测试工程是否可用

就是一个非常简单的工程,只有一个Controller,让我们来启动然后调用一下TestController里面的test方法
在这里插入图片描述

调用结果

调用结果是正常的,也通过MyBatis-plus读取到了数据的内容
在这里插入图片描述

正式开始

分离依赖

target目录结构

当我们运行成功后,在项目的target目录下,会自动给我们生成项目名-1.0-SNAPSHOT.jar文件,如图一所示。如果没有生成的话,大家可以点击右侧的Maven生成,如图二所示。
在这里插入图片描述

在这里插入图片描述

打开文件拓展名

这里我们是生成了.jar文件的,那就进入到下一步,将jar文件重命名成.zip文件,如果有同学没打开文件扩展名的选项,可以在图一所示的地方打开文件扩展名选项即可。

在这里插入图片描述

修改文件拓展名

这个时候我们已经将.jar改成.zip了,双击打开或者使用压缩工具打开都可以。
在这里插入图片描述

如果改成zip报错可以改成rar

如果打开时候提示报错,可以将.zip换成.rar试试哦
在这里插入图片描述

压缩包目录

打开后的文件目录如下图所示
在这里插入图片描述

解压出lib目录

接着我们选择第一个文件夹BOOT-INF,然后可以看到它下面有两个二级文件夹,其中一个就是lib,这个就是我们想要的文件夹。我们可以双击打开看看里面存放的都是什么文件。
在这里插入图片描述
我们打开后发现里面都是依赖文件,所以这就是我们想要的依赖包
在这里插入图片描述
然后我们把这个lib依赖解压出来,解压位置随意。

修改Pom文件

将lib文件夹解压出来后,我们开始修改Pom文件,这个时候我们已经将依赖分离出来了,我们只需要打包代码即可。
所以我们修改Pom文件分两种情况

情况一

在Pom文件下的build节点下已经有pluginManagement节点,找到下面这个节点,将图片红框中的几行复制进去
在这里插入图片描述

情况二

在Pom文件下的build节点下还没有pluginManagement节点,直接将我下面提供的pluginManagement节点复制到build节点底下即可。
在这里插入图片描述

<pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>2.3.2.RELEASE</version>
                    <configuration>
                        <finalName>boot-template</finalName>
                        <layout>ZIP</layout>
                        <includeSystemScope>true</includeSystemScope>
                        <executable>true</executable>
                        <includes>
                            <include>
                                <groupId>nothing</groupId>
                                <artifactId>nothing</artifactId>
                            </include>
                        </includes>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>

重新打包

接下来第一步先点击右上方的加载Maven更改,或者使用快捷键Ctrl+shift+o,然后点击右侧Maven菜单下的生命周期里面的package即可
在这里插入图片描述
图一是控制台的输出,图二是打包后的文件,我们可以看到这次打包后只有132KB
在这里插入图片描述

在这里插入图片描述

测试jar包

我们接下来测试分离完后的jar包是否正常使用,我们将lib文件夹和jar包放在同一个目录下面,然后打开一个cmd窗口,输入下面命令–记得将IDEA里面的工程停了,不然会报端口被占用哦。

java -Dloader.path=./lib -jar boot-template.jar

命令解释:-Dloader.path 用来指定lib存放位置,下面是运行成功截图~
在这里插入图片描述

测试接口

接着我们来测试接口功能是否正常,我们回到接口工具重新调用了一次test接口,发现返回的数据没区别
在这里插入图片描述
在CMD里面我们也可以看到,连接MySQL也没啥问题。到此本文结束,如有问题请可以在评论区发出来或者私信我哦~
在这里插入图片描述

备注

细心的小伙伴发现,如果我们改了Pom文件要怎么办呢?当然是把之前加的那几行去掉,然后重新解压一次lib包即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1137120.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

身份证号码,格式校验:@IdCard(Validation + Hutool)

目标 自定义一个用于校验 身份证号码 格式的注解IdCard&#xff0c;能够和现有的 Validation 兼容&#xff0c;使用方式和其他校验注解保持一致&#xff08;使用 Valid 注解接口参数&#xff09;。 校验逻辑 有效格式 符合国家标准。 公民身份号码按照GB11643&#xff0d;…

NOIP2023模拟2联测23 分神

题目大意 有 n n n个矩形&#xff0c;每个矩形的四条边都平行于坐标轴。对于一个矩形&#xff0c;它的左下角坐标为 ( x 1 , y 1 ) (x_1,y_1) (x1​,y1​)&#xff0c;右上角坐标为 ( x 2 , y 2 ) (x_2,y_2) (x2​,y2​)&#xff0c;包含了所有满足 x 1 ≤ x ≤ x 2 , y 1 ≤ …

app分发的一些流程2

应用分发的流程通常包括以下步骤&#xff1a; 开发应用程序&#xff1a;首先&#xff0c;您需要开发您的应用程序。这包括编写代码、设计用户界面、测试应用程序等等。确保您的应用程序符合各个应用商店的规范和要求&#xff0c;以确保顺利通过审核。 准备应用材料&#xff1…

Android 13.0 自定义仿小米全面屏手势导航左右手势滑动返回UI效果

1.概述 在13.0的系统产品开发中,对于设置默认系统手势的左右滑动返回UI,系统默认的是比较简单,产品需求要求仿小米华为的左右手势返回UI样式的定制,所以需要找到绘制手势返回UI的相关代码,然后自定义手势导航左右滑动返回的相关UI就可以了 接下来就来实现手势导航做好手势…

windows殺死端口

netstat -ano | findstr 8081 taskkill /F /PID taskkill /F /PID 16624

796. 子矩阵的和(左上角前缀和)

题目&#xff1a; 796. 子矩阵的和 - AcWing题库 思路&#xff1a; 1.暴力搜索&#xff08;搜索时间复杂度为O(n2)&#xff0c;很多时候会超时&#xff09; 2. 前缀和&#xff08;左上角前缀和&#xff09;&#xff1a;本题特殊在不是直接求前n个数的和&#xff0c;而是求…

竞赛 深度学习图像分类算法研究与实现 - 卷积神经网络图像分类

文章目录 0 前言1 常用的分类网络介绍1.1 CNN1.2 VGG1.3 GoogleNet 2 图像分类部分代码实现2.1 环境依赖2.2 需要导入的包2.3 参数设置(路径&#xff0c;图像尺寸&#xff0c;数据集分割比例)2.4 从preprocessedFolder读取图片并返回numpy格式(便于在神经网络中训练)2.5 数据预…

Leo赠书活动-03期 【ChatGPT 驱动软件开发:AI 在软件研发全流程中的革新与实践 】

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

Java学习 习题 1.

一、 1.2. 3. 4. 5. 二、 1. 2. 3. 4. 5. 6. 7. 8.

【Java技术专题】「入门到精通系列教程」深入探索Java特性中并发编程体系的原理和实战开发指南( 实现可伸缩IO专题)— 上

深入探索Java特性中并发编程体系的原理和实战开发指南&#xff08; 实现可伸缩IO专题&#xff09; 总体内容概览可扩展的网络服务分布式对象传统的阻塞式网络服务每个请求或连接可以在独立的线程中进行处理Server服务处理请求类Handler处理逻辑类优点缺点 可扩展性目标平稳降级…

zotero word联动 如何使用Zotero在Word中插入参考文献

下载https://gitee.com/redleafnew00/Chinese-STD-GB-T-7714-related-csl里面论文要求的格式&#xff0c;或者word里面点这个再搜 输入好以后一定要输入空格&#xff01;

RK3399平台开发系列讲解(基础篇)嵌入式编码规范有哪些

🚀返回专栏总目录 文章目录 一、什么是GNU二、GNU C 编码规范2.1、格式2.2、注释2.3、语法约定2.4、命名2.5、系统可移植性2.6、CPU 可移植性2.7、系统函数2.8、国际化2.9、字符集沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 GNU 编码规范的出发点,是确保所有 G…

【C语言】strcpy()函数

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.strcpy()函数简介 1.函数功能 2.函数参数 1>.char * destination 2>.const char * source 3.函数返回值 4.函数头文件 二.strcpy()函数的具体使用 1.使用s…

【数据结构练习】树和二叉树的选择题精选集锦

前言 编程想要学的好&#xff0c;刷题少不了&#xff0c;我们不仅要多刷题&#xff0c;还要刷好题&#xff01;为此我开启了一个弯道超车必做好题锦集的系列&#xff0c;此为树和二叉树的选择题精选集锦。该系列会不定期更新&#xff0c;敬请期待&#xff01; 1.已知某二叉树的…

c++学习之搜索二叉树

目录 一&#xff0c;什么是搜索二叉树&#xff1f; 二&#xff0c;搜索二叉树的实现 非递归实现 节点与类成员 插入 查找 删除 递归实现 插入 查找 删除 一&#xff0c;什么是搜索二叉树&#xff1f; 搜索二叉树&#xff08;Binary Search Tree&#xff09;是一种常见…

jdbc 执行批处理任务

package com.csdn.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; //演示执行批处理任务 public class ExecuteBatchTask {public static void main(String[] args) throws ClassNotFou…

通过jsonobject.tostring 传字符串为有空格问题

目录 通过jsonobject.tostring 传字符串为有空格问题 1.问题原因解决思路解决方案总结参考 文章所属专区 项目问题解决 1.问题原因 通过JSONObject.toString()方法将字符串转换为JSON格式时&#xff0c;可能会出现空格的情况。这是因为JSONObject.toString()方法在生成JSON字…

理解什么是接口测试?怎样做接口测试?

一 什么是接口&#xff1f; 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点&#xff0c;定义特定的交互点&#xff0c;然后通过这些交互点来&#xff0c;通过一些特殊的规则也就是协议&#xff0c;来进行数据之间的交互。接口测试主要用于外部系统与系统之…

贪心算法学习——单调递增的数字

一&#xff0c;单调递增的数字 1.题目 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈 单调递增 。 示例 1: 输入: n 10 输出: 9示例 2: 输入…

【c++速通】入门级攻略:引用详解 | auto的类型推导 | 不一样的for循环 | nullptr版本空指针

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; C入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言&#x1f324;️引用☁️引用的概念☁️引用的特性⭐引用在定义时必须初始化 ☁️常引用…