单体项目和多模块项目jar包补丁部署注意事项

前言

目前接触的项目结构主要有单体项目和多模块项目,且这些项目是部署在网络环境一般的服务器上,随着项目规模变大,单个jar的体积动辄就上百MB,每一次代码小改动不可能都上传整个jar,每次代码改动后可能就是把编译后的class文件在服务器上做一个替换,或者直接使用arthas临时更改代码逻辑,但在我所处的环境下并不建议使用arthas(其修改的代码只在当此运行时才生效,因为登录这个服务器做其他工作的人员比较多,不排除会重启该程序,如果重启后原来改动随即失效)。下面简单介绍一下单体架构和多模块架构补丁部署时注意事项(仅供参考)。

单体


使用maven打包后在target中生成jar包文件,使用压缩包打开后可以看到这样的目录结构

单体结构下目录简单明了,替换的class文件直接在cn目录进去找到,目录下都是class文件然后替换即可。替换mapper或者其他配置文件也是如此。

特别注意:如果你添加依赖,并把依赖的jar放到lib下,你的jar不能被压缩 ,否则会出现以下情况

这里看到我添加进去的jar已经被压缩了,添加前后大小不一致。启动后

java.lang.IllegalStateException: Unable to open nested entry 'BOOT-INF/lib/hutool-all-5.8.18.jar'. It has been compressed and nested jar files must be stored without compression. Please check the mechanism used to create your executable jar file这样一个错误。其原因就是jar被压缩了。

怎么解决?

我电脑上安装的压缩软件是Bandizip,点击添加、更多选项、在压缩级别选择仅存储。(如果你使用的rar或者其他压缩软件,可以自行搜索相应方法)

添加进去后可以看到压缩前后大小一致,测试启动正常。

多模块

这里首先介绍以下多模块jar包结构,其classes目录下只有start模块下的启动类

原因我们可以在start模块的pom文件中看到,其他模块都是作为start模块的依赖来引入的,那么依赖一定都是在lib目录下。

很快嗷,在lib目录下找到了这些模块

随便打开其中一个就可看到其中熟悉的目录,以及被编译后的class文件。

在多模块下,如果修改了某处地方,可以将修改的那个模块打包上传然后替换,当然务必记住jar不能压缩,否则启动后也会报上述单体项目一样的错误。其解决方式和单体的添加依赖jar包一致,可以看上面。

jar为什么不能压缩

jar包在经过手动解压缩和压缩后可能会出现无法运行的问题,这可能并非代码本身的问题,而是与压缩方式有关。当jar包的大小发生变化时,可能会导致文件内容或结构的改变,从而影响到jar包的运行。

其他解决方式

参考:https://www.cnblogs.com/dayou123123/p/6845432.html

相关推荐
电商API_1800790524730 分钟前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
一点程序43 分钟前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
C雨后彩虹1 小时前
计算疫情扩散时间
java·数据结构·算法·华为·面试
2601_949809591 小时前
flutter_for_openharmony家庭相册app实战+我的Tab实现
java·javascript·flutter
vx_BS813301 小时前
【直接可用源码免费送】计算机毕业设计精选项目03574基于Python的网上商城管理系统设计与实现:Java/PHP/Python/C#小程序、单片机、成品+文档源码支持定制
java·python·课程设计
2601_949868361 小时前
Flutter for OpenHarmony 电子合同签署App实战 - 已签合同实现
java·开发语言·flutter
达文汐2 小时前
【困难】力扣算法题解析LeetCode332:重新安排行程
java·数据结构·经验分享·算法·leetcode·力扣
培风图南以星河揽胜2 小时前
Java版LeetCode热题100之零钱兑换:动态规划经典问题深度解析
java·leetcode·动态规划
启山智软2 小时前
【中大企业选择源码部署商城系统】
java·spring·商城开发
我真的是大笨蛋2 小时前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化