单体项目和多模块项目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

相关推荐
橙露18 小时前
Nginx Location配置全解析:从基础到实战避坑
java·linux·服务器
无敌最俊朗@1 天前
STL-vector面试剖析(面试复习4)
java·面试·职场和发展
PPPPickup1 天前
easychat项目复盘---获取联系人列表,联系人详细,删除拉黑联系人
java·前端·javascript
LiamTuc1 天前
Java构造函数
java·开发语言
长安er1 天前
LeetCode 206/92/25 链表翻转问题-“盒子-标签-纸条模型”
java·数据结构·算法·leetcode·链表·链表翻转
菜鸟plus+1 天前
N+1查询
java·服务器·数据库
我要添砖java1 天前
《JAVAEE》网络编程-什么是网络?
java·网络·java-ee
CoderYanger1 天前
动态规划算法-01背包问题:50.分割等和子集
java·算法·leetcode·动态规划·1024程序员节
菜鸟233号1 天前
力扣513 找树左下角的值 java实现
java·数据结构·算法·leetcode
Neoest1 天前
【EasyExcel 填坑日记】“Syntax error on token )“: 一次编译错误在逃 Runtime 的灵异事件
java·eclipse·编辑器